私はアセットパイプラインとプリコンパイルのCapistranoタスクを使用して大きなアプリを配備するという考え方に苦労しています。Rails 3.1のアセットパイプラインプロダクションとJavaScriptの実行環境の外付け
私は、javascriptランタイム環境をインストールし、各プロダクションサーバーにアセットをプリコンパイルしたくないです。
アセットは、アプリのコピーを持たない2台のNginxサーバーにアップロードする必要があります。
だから私は、アプリケーションサーバにローカル資産をプリコンパイルして、nginxのサーバーに資産をアップロードカピストラーノタスク、およびマニフェストファイルを作成しました。
ローカルマシンのアセットが、私が配備しているgitブランチのアセットと異なる場合があります。
もっと良い方法があるのですか、あるいは私はちょうど正しいクリーンなブランチからいつも展開する必要がありますか?ここ
編集はプリコンパイルを行い、あなたのローカルマシン上の資産が展開枝にそれとは異なる可能性があると言う
namespace :assets do
after "deploy:update_code", "assets:precompile"
after "assets:precompile", "assets:upload_assets"
after "assets:precompile", "assets:upload_manifest"
desc "precompile assets"
task :precompile do
run_locally("bundle exec rake assets:clean && bundle exec rake assets:precompile RAILS_ENV=#{rails_env}")
end
desc "precompile and upload assets to webserver"
task :upload_assets, :roles => :nginx do
top.upload("public/assets", "/usr/local/fieldphone/#{rails_env}/", :via => :scp, :recursive => true)
end
#
desc "upload manifest file"
task :upload_manifest, :roles => :app do
top.upload("public/manifest.yml", "#{release_path}/public/", :via => :scp)
end
end
ソースSASSとコーヒーファイルは、最近の変更(コミットされていない変更、人跡未踏のファイルなど)を持っている可能性があるため、資産が異なる場合があります。私はコンパイルされた資産をコミットすることに傾いています(でも、それは汚いと感じています)。私は、運用サーバー上の資産をコンパイルしてから運用サーバーから正しい場所(nginxサーバー)にscpする必要はないと思います。 –
コンパイルされたファイルがない場合、アセットはすべて動的に処理されます。それは起こっていないのですか?また、masterブランチをproduction/stableとして使用している場合、それらをコミットするのに間違ったことはありません。 –
は開発中です。これらは動的に処理されます。プロダクションでは動的には提供されません。nginxはプリコンパイルされたファイルを提供します。私はちょうどそれらをプリコンパイルし、それらをnginxサーバにアップロードするより良い方法を考え出したいと思います。 –