9

私は依存関係としてSprockets 2.0.3を含むRails 3.1.3を実行しています。ステージング時のRailsアセットパイプライン:正確な指紋だが404ing

ステージング環境を、Railsガイドでプロダクション用に提案する方法で設定するように設定しました。展開に期待通り、私は私のCapfile

load 'deploy' 
load 'deploy/assets' 

そして資産に含まれている

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = false 
config.assets.digest = true 

は、プリコンパイルされ得ます。

公共/資産では、私は指紋で資産を期待どおりに見つけることができます。

application-bd402855d34fb61e0a1690da06f79f20.js 
application-bd402855d34fb61e0a1690da06f79f20.js.gz 
application-ed3f9a8d23992790841c11b6692fb576.css 
application-ed3f9a8d23992790841c11b6692fb576.css.gz 
...and a bunch of images... 

ページを読み込むと、正しい参照、指紋などが表示されます。

<link href="/assets/application-ed3f9a8d23992790841c11b6692fb576.css" media="screen" rel="stylesheet" type="text/css"> 
<script src="/assets/application-bd402855d34fb61e0a1690da06f79f20.js" type="text/javascript"></script> 

ただし、すべての404s、css、js、画像、すべて。

誰もがここでの取引が分かりますか?ありがとう!

+0

staging.rb設定ファイルを持っていますか?その場合は、そこに正しいパイプラインオプションがない可能性があります。 –

+0

ステージングは​​上記の設定オプションで設定されています。これは、Railsガイドがプロダクションで提案しているものと同じです。私はほとんど同じ動作をしたい。それは正しいのですか? – cotopaxi

+0

いいですね。私はこれについてもう少し考えます... –

答えて

0
config.assets.compile = false 

は次のようになります。

bundle exec rake tmp:cache:clear 

と、サーバーを再起動します。

また
config.assets.compile = true 

、あなたのキャッシュクリアを確認してください。

+2

オンザフライで資産を編集すると、パフォーマンスが低下します。 – Maarten

0
config.assets.compile = false 

それは他の回答

config.assets.compile = true 

での提案にもかかわらず

1

真でなければなりません...回避策、解決策ではありません。このオプションを使用すると、Railsはpublic/assetsで見つからないアセットのオンザフライでのコンパイルに戻ることができます。ステージングで問題が「解決」されるかもしれませんが、Railsが実行時に資産をコンパイルすることは、本番環境では最適ではありません。

私はRails 3.1.xの新しいアセットパイプラインを使って作業していた頃、圧縮とダイジェストの生成に問題があったのを覚えています。試してみることをお勧めします。

config.assets.compress = false 
config.assets.digest = false 

個別にまとめてお試しください。また、Railsの最新バージョンやアセットパイプラインの宝石にアップグレードすることもできます。

0

数ヶ月前に同じ問題が発生しました。いくつかの理由から、私は手動でアセットのコンパイルをプロダクションでトリガすることを選択しました。RBは

config.assets.compile = false 

を持っており、Capistranoの展開でも、(同様にRVMを使用して)資産プリコンパイルするタスクがあります:究極のステップは、我々は資産フォルダをシンボリックリンクすることを確認した

run "cd #{release_path} && RAILS_ENV=production bundle exec rake assets:precompile", shell: fetch(:rvm_shell) 

をするように、我々変更されていないアセットを再コンパイルする必要はありません。

run "ln -nfs #{shared_path}/assets #{release_path}/public/assets" 
1

アセットがコンパイルされていて、パブリックディレクトリに存在することが確実な場合は、それをWebサーバーの設定にすることはできますか?プロダクション/ステージング環境では、アセットはレールアプリに当たってはならず、Webサーバーから直接配信されるべきです。サンプルのApache設定例をご紹介します:

<LocationMatch "^/assets/.*$"> 
     Header unset ETag 
     FileETag None 
     # RFC says only cache for 1 year 
     ExpiresActive On 
     ExpiresDefault "access plus 1 year" 

     SetEnv no-gzip 
     RewriteEngine on 
     # Make sure the browser supports gzip encoding before we send it 
     RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b 
     RewriteCond %{REQUEST_FILENAME}.gz -s 
     RewriteRule ^(.+) $1.gz [L] 

    </LocationMatch> 

    <FilesMatch \.css\.gz$> 
     ForceType text/css 
     Header set Content-Encoding gzip 
    </FilesMatch> 

    <FilesMatch \.js\.gz$> 
     ForceType text/javascript 
     Header set Content-Encoding gzip 
    </FilesMatch> 
関連する問題