2011-10-28 10 views
3

私はアセットパイプラインとプリコンパイルのCapistranoタスクを使用して大きなアプリを配備するという考え方に苦労しています。Rails 3.1のアセットパイプラインプロダクションとJavaScriptの実行環境の外付け

  1. 私は、javascriptランタイム環境をインストールし、各プロダクションサーバーにアセットをプリコンパイルしたくないです。

  2. アセットは、アプリのコピーを持たない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 

答えて

0

をアップロードキャップ作業です。通常の環境では、開発環境にはコンパイル済みの資産は必要ありません。

私はあなたの仕事を変更して、それらが展開されると資産を削除することを提案します。あなたのローカル作業コピーは常に清潔にしておきます。これにより、各デプロイで最新(正しい)バージョンのファイルが取得されることが保証されます。 (そうしていない場合は、すべてのアセットを実行するためにSprocketsに依存するdevモードのデフォルトオプションを使用することをお勧めします)。

+0

ソースSASSとコーヒーファイルは、最近の変更(コミットされていない変更、人跡未踏のファイルなど)を持っている可能性があるため、資産が異なる場合があります。私はコンパイルされた資産をコミットすることに傾いています(でも、それは汚いと感じています)。私は、運用サーバー上の資産をコンパイルしてから運用サーバーから正しい場所(nginxサーバー)にscpする必要はないと思います。 –

+0

コンパイルされたファイルがない場合、アセットはすべて動的に処理されます。それは起こっていないのですか?また、masterブランチをproduction/stableとして使用している場合、それらをコミットするのに間違ったことはありません。 –

+0

は開発中です。これらは動的に処理されます。プロダクションでは動的には提供されません。nginxはプリコンパイルされたファイルを提供します。私はちょうどそれらをプリコンパイルし、それらをnginxサーバにアップロードするより良い方法を考え出したいと思います。 –

0

ファイルをリポジトリにコミットしてNginxサーバーにデプロイするのは本当に間違っているとは思っていません。これは宝石用のベンダーキャッシュに似ていますが、冗長ですが、理由があります。

また、Nginxサーバーに実際にアプリケーションを展開し、Capistranoでそこのアセットをコンパイルして、それらのサーバーでアプリケーションを起動させないでください(「アセット」のCapistranoロールを作成し、そのロールで起動しないでください)。これはちょっと混乱するかもしれません...

最後に、アセットサーバーの水域を曇らせたくない場合や、資産を他の場所に展開するためのオプションを開いたままにしたい場合は、Capistrano git stash保存されていない変更を最初に確認し、マスターブランチをチェックアウトし、資産をコンパイルしてアップロードし、削除し、前のブランチをチェックアウトして(git checkout -)、隠し変更を再適用して(git stash apply --index)、続行してください。 :)

資源:

http://git-scm.com/book/en/Git-Tools-Stashing

Is there any way to git checkout previous branch?

関連する問題