如果您将 Rails 与 Sprockets 和 Opscode Chef 一起使用,您将如何在部署期间处理资产预编译?我想保持我的 git 历史干净,所以我不想在本地预编译它们然后将它们提交到存储库。
最简单的方法似乎是将它们添加到应用程序说明书的迁移命令中,但这对我来说似乎很讨厌。资产预编译应该与数据库迁移分开。关于如何处理这个问题的任何其他建议?
如果您将 Rails 与 Sprockets 和 Opscode Chef 一起使用,您将如何在部署期间处理资产预编译?我想保持我的 git 历史干净,所以我不想在本地预编译它们然后将它们提交到存储库。
最简单的方法似乎是将它们添加到应用程序说明书的迁移命令中,但这对我来说似乎很讨厌。资产预编译应该与数据库迁移分开。关于如何处理这个问题的任何其他建议?
如果您使用的是 deploy_revision 资源,您可以粘贴 rake 任务以将资产预编译到before_restart
块中。
这是我的 deploy_revision 资源中的代码片段。因为我使用的是 RVM,所以我安装了 Fletcher Nichol 令人惊叹的RVM 食谱。您可以将其替换为ruby-block
资源。
在我的 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