Chef with rails:在部署期间处理资产预编译

时间:2012-03-15 14:20:03

标签: ruby-on-rails sprockets chef

如果您使用带有Sprockets和Opscode Chef的rails,那么在部署期间如何处理资产预编译?我想保持我的git历史清洁,所以我不想在本地预先编译它们然后将它们提交到存储库。

最简单的方法似乎是将它们添加到应用程序cookbook的迁移命令中,但这对我来说似乎很讨厌。资产预编译应与数据库迁移分开。关于如何处理这个的任何其他建议?

1 个答案:

答案 0 :(得分:4)

如果您使用的是deploy_revision资源,则可以坚持使用rake任务将资产预编译到before_restart块中。

以下是我的deploy_revision资源中的代码片段。由于我使用RVM,我已经安装了Fletcher Nichol令人惊叹的RVM cookbook令人敬畏的精彩。您可以使用ruby-block资源替换它。

my gist中查看更完整的示例。

 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