3

Rails を Sprockets と Opscode Chef で使用している場合、デプロイ中にアセットのプリコンパイルをどのように処理していますか? git履歴をきれいに保ちたいので、ローカルでプリコンパイルしてからリポジトリにコミットしたくありません。

最も簡単な方法は、それらをアプリケーションのクックブックの移行コマンドに追加することのようですが、それは厄介なことのように思えます。アセットのプリコンパイルは、データベースの移行とは別にする必要があります。これを処理する方法に関する他の提案はありますか?

4

1 に答える 1

4

deploy_revision リソースを使用している場合は、rake タスクを貼り付けてアセットのプリコンパイルをbefore_restartブロックに実行できます。

私の deploy_revision リソースにあるコードのスニペットを次に示します。私は RVM を使用しているので、Fletcher Nichol のすばらしいRVM 料理本をインストールしました。ruby-blockこれをリソースに置き換えることができます。

私の要点でより完全な例をチェックアウトしてください。

 app = node[:rails][:app_name]
 before_restart do
   rvm_shell "assets precompile" do
     ruby_string "#{app[:ruby_ver]}@#{app[:gemset]}"
     cwd release_path
     user app[:deploy_user]
     group app[:deploy_user]

     # TODO I could not set the environment via the builtin command. Does not look like it is getting passed to popen4
     # So instead of `environment "RAILS_ENV" => app[:environment]` I have it in the code block
     code %{
       export RAILS_ENV=#{app[:environment]}
       bundle exec rake assets:precompile
     }
   end
 end
于 2012-03-17T06:20:50.607 に答える