【问题标题】:OpsWorks: assets precompiled multiple timesOpsWorks:多次预编译的资产
【发布时间】: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 的建议尝试了一个厨师钩子,结果相同。你怎么能让它只在需要的时候运行呢?

【问题讨论】:

    标签: ruby-on-rails deployment chef-infra aws-opsworks


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多