12

私は使用Ruby 2.0.0-p247していますRails 4.0.0

次のような最小限のRails 4サイトを作成すると:

rails new minimal
cd minimal
rails generate controller home index
tee config/routes.rb <<EOF
Minimal::Application.routes.draw do
  root 'home#index'
end
EOF

次に、アセットをプリコンパイルします

rake assets:precompile

次のようなアセットを生成します。

I, [2013-09-04T17:05:36.992951 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-723d1be6cc741a3aabb1cec24276d681.js
I, [2013-09-04T17:05:37.052303 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-f1a14051f17824976271b9c0460232f0.css

しかし、サーバーを本番モードで起動すると、

RAILS_ENV=production rails s

HTML で生成された URL は、プリコンパイル済みファイルを指していません。

<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>

むしろ、私は期待します:

<link data-turbolinks-track="true" href="assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

デフォルトconfig/environments/production.rb設定では、ダイジェストを使用するように指定されています。

config.assets.digest = true

しかし、それは選択的に無視されているようですか?

何か不足していますか?

アップデート:

Rails 4.2.3 でこれをテストしたところ、修正されたように見えますがrails s、プロダクション モードで開始するには、さらにいくつかの環境変数をコマンドに渡す必要があります。

SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production rails s
4

2 に答える 2

12

この質問を書いているときに、これがバグであることを示唆するこのブログ投稿に出くわしました。

http://railsblog.kieser.net/2013/08/rails4-phusion-passenger-asset-pipeline.html

さまざまな提案のうち、コンパイルのフォールバックをtrueに設定するだけです...

config.assets.compile = true

Rails を起動して、適切に消化された URL を生成するのに十分なようです。

<link data-turbolinks-track="true" href="/assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

RAILS_ENV と RAILS_GROUPS を明示的に設定するもう 1 つの提案は、プリコンパイル済みファイルで異なるダイジェスト文字列を生成するように見えましたが、生成された HTML と常に一致しているようです。

于 2013-09-04T08:17:50.610 に答える
0

アセットのバージョン番号を上げることで、ダイジェストを含まないアセット リンクを解決できました。

     # Version of your assets, change this if you want to expire all your assets
-    config.assets.version = '1.0'
+    config.assets.version = '2.0'

config/application.rbこれは、アップグレードしている場合、または新しい場所のいずれかにありますconfig/initializers/asset.rb

于 2015-10-26T16:30:26.970 に答える