如果您使用带有Sprockets和Opscode Chef的rails,那么在部署期间如何处理资产预编译?我想保持我的git历史清洁,所以我不想在本地预先编译它们然后将它们提交到存储库。
最简单的方法似乎是将它们添加到应用程序cookbook的迁移命令中,但这对我来说似乎很讨厌。资产预编译应与数据库迁移分开。关于如何处理这个的任何其他建议?
答案 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