OpsWorks:多次预编译的资产
Posted
技术标签:
【中文标题】OpsWorks:多次预编译的资产【英文标题】:OpsWorks: assets precompiled multiple times 【发布时间】:2015-10-04 18:26:28 【问题描述】:我正在使用 AWS OpsWorks 部署 Rails 应用程序。为了预编译资产,我使用了以下 Chef 配方:
node[:deploy].each do |application, deploy|
deploy_to = node[:deploy][application][:deploy_to]
rails_env = node[:deploy][application][:rails_env]
directory "#deploy_to/shared/assets"
link "#deploy_to/current/public/assets" do
to "#deploy_to/shared/assets"
end
execute "rake assets:precompile" do
cwd "#deploy_to/current"
command "bundle exec rake assets:precompile"
environment "RAILS_ENV" => rails_env
end
end
它可以正确预编译,但在后续部署中,它会再次经历整个预编译过程,即使没有修改任何资产并且资产文件夹是共享的。我还按照here 的建议尝试了一个厨师钩子,结果相同。你怎么能让它只在需要的时候运行呢?
【问题讨论】:
【参考方案1】:您可以在语句中添加 not_if 或 only_if 子句:
类似这样的:
execute "rake assets:precompile" do
cwd "#deploy_to/current"
command "bundle exec rake assets:precompile"
environment "RAILS_ENV" => rails_env
not_if File.exists?("<path to expected precompiled asset>")
end
如果你想让它在每次某个目录发生变化时运行,你可以使用chef notifications。
【讨论】:
以上是关于OpsWorks:多次预编译的资产的主要内容,如果未能解决你的问题,请参考以下文章