今月、Rails 3.0 から Rails 3.1 にアップグレードしました - 今週はサーバーを本番モードで起動しようとしました - 今日は壁にぶつかりました!
environment.rb ファイルで設定しない限り、アセット パイプラインを介して本番環境サーバーにパブリック アセット (JavaScript および CSS) を提供させることができconfig.assets.compile = true
ません。
多数の JS ファイルと CSS ファイルがあり、それぞれが 1 つまたは 2 つの異なるページで使用される傾向があります。これは、単一の「マニフェスト」ファイルを作成することは、各ページがわずかに異なるものを必要とするため、私の使用法に合わないことを意味します。また、一部の CSS がうまくまとまらないことも予想されます。そのため、大量の CSS / JS を後で整理することを検討して、「機能させるだけ」というアプローチを取りました。
production.rb ファイルは次のとおりです。
Implicit::Application.configure do
...
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# I set this to true, as I am testing this locally, just running a local Thin server
config.serve_static_assets = true
config.assets.compress = true
# Setting this to false removes the issue - but is SLOW
config.assets.compile = true
config.assets.digest = true
# This is overkill - but does get EVERYTHING precompiled for now
config.assets.precompile += %w( *.css *.js )
config.action_dispatch.x_sendfile_header = nil
...
end
これは私にとってまったく新しい分野なので、今日はこれらのブール値を切り替えたり、ローカルの Thin / Rails サーバーを停止/起動して試したりすることに多くの時間を費やしました。しかし、確実な違いをもたらした唯一の値は、コンパイル フラグです。
私の application.rb ファイルはほぼ標準でありconfig.assets.enabled = true
、config.assets.initialize_on_precompile = false
その中には、heroku の投稿からの後者が含まれています (これも推測です)。
public/assets
コマンドで作成された完全に入力されたディレクトリがありbundle exec rake assets:precompile
ます。これは、古いラップトップで実行するのに約20分かかります(5年)。おそらく、その「すべてをキャッチ」プリコンパイル正規表現と関係がありますが、その行にコメントすると、まだ引き継がれます10分(!)
コンパイル フラグを に設定するとtrue
、これらのアセットのコピーが自分の/tmp/cache
ディレクトリに作成されるのがわかります。これは明らかに、アセットの独自の「コンパイル済みコピー」を作成するアプリケーションです。
コンパイル フラグをfalse
に設定すると、jquery.reveal isn't precompiled
. ただし、http://localhost:3000/assets/jquery.reveal.js
javascript ファイルにアクセスすると、サービスが提供されます。
これを引き起こしているアプリケーションレイアウトの行は次のとおりです。
<%= javascript_include_tag "application", "jquery.reveal" %>
その jquery.reveal をjquery.reveal.js
変更せずに変更しようとしました。それを削除すると、インデックスページが修正されますが、jquery.reveal 機能はもちろんなくなります。明らかに、application.js は正しく提供されています。public/assets ディレクトリにプリコンパイルされたファイルが表示されるため、jquery.reveal がそうでない理由がわかりません。