Chef 部署期间 'release_path' 上的 NoMethodError
NoMethodError on 'release_path' during chef deployment
我对 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
助手。怎么不能在这里定义呢?
以下是我在 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
我使用 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
我对 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
助手。怎么不能在这里定义呢?
以下是我在 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
我使用 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