【问题标题】:NoMethodError on 'release_path' during chef deployment厨师部署期间“release_path”上的 NoMethodError
【发布时间】:2015-04-01 20:47:44
【问题描述】:

我是 Chef 部署的新手,我正在尝试使用 OpsWorks 部署一个 Rails 应用程序。问题在于资产预编译。

我有这个方法来执行预编译:

execute "rake assets:precompile" do   
  cwd release_path
  command "bundle exec rake assets:precompile --trace"    
  environment "RAILS_ENV" => "production"
end

当我使用 Chef 进行部署时,我收到以下错误:

ERROR: undefined method `release_path' for Chef::Resource::Execute

奇怪的是,我能找到的每个示例配方都使用了 release_path 助手。这里怎么能不定义呢?

【问题讨论】:

  • 您是否在execute 之外使用deploy 资源?在那里,release_path 方法存在,但是当它在你的配方的顶层时,release_path 没有定义。请出示您的完整代码。
  • 那是precompile.rb的完整内容,这是我的食谱。我应该将此代码包装在deploy 资源中吗?
  • 这取决于,如果你想使用 deploy 资源 - 你不必。只需将release_path 替换为例如"/usr/local/myapp"
  • 实际上你当然应该用你的rails应用程序的路径替换它;-)

标签: ruby-on-rails-4 asset-pipeline chef-infra aws-opsworks


【解决方案1】:

我使用node[:deploy]['appshortname'][:deploy_to] 解决了这个问题。我的完整食谱如下:

node[:deploy].each do |application, deploy|
  execute "rake assets:precompile" do   
    cwd "#{deploy[:deploy_to]}/current"
    command "bundle exec rake assets:precompile --trace"

    environment deploy[:environment_variables].merge(
      "RAILS_ENV" => deploy[:rails_env]
    )
  end
end

【讨论】:

    【解决方案2】:

    这是我如何在 opsworks 上的 rails 应用程序上进行预编译:

    此代码位于您的应用程序部署文件夹中,位于 /approot/deploy/before_migrate.rb 中名为“before_migrate.rb”的文件中。

    环境变量在 opsworks 中定义的应用程序中创建。

    rails_env = new_resource.environment["RAILS_ENV"]
    secret_key_base = new_resource.environment["SECRET_KEY_BASE"]
    devise_secret_key = new_resource.environment["DEVISE_SECRET_KEY"]
    
    Chef::Log.info("Precompiling assets for RAILS_ENV=#{rails_env}...")
    Chef::Log.info("SECRET_KEY_BASE=#{secret_key_base}, DEVISE_SECRET_KEY=#{devise_secret_key}")
    
    execute "rake assets:precompile" do
      cwd release_path
      command "RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
    
      environment "RAILS_ENV" => rails_env
      environment "SECRET_KEY_BASE" => secret_key_base
      environment "DEVISE_SECRET_KEY" => devise_secret_key
    end
    

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2014-08-21
      相关资源
      最近更新 更多