我想在托管许多应用程序的堆栈层(AWS Opsworks)中增加部署时间。 Currenlty我收到以下错误:
Eror
[2014-05-05T22:27:51+00:00] ERROR: Running exception handlers
[2014-05-05T22:27:51+00:00] ERROR: Exception handlers complete
[2014-05-05T22:27:51+00:00] FATAL: Stacktrace dumped to /var/lib/aws/opsworks/cache/chef-stacktrace.out
[2014-05-05T22:27:51+00:00] ERROR: deploy[/srv/www/lakers_test] (opsworks_delayed_job::deploy line 65) had an error: Mixlib::ShellOut::CommandTimeout: Command timed out after 600s:
提前致谢。
答案 0 :(得分:2)
首先,如上所述in this ticket报告类似问题,Opsworks的人建议先尝试加速通话(总是有优化空间)。
如果这不起作用,我们可以走下兔洞:this gets called,然后调用Mixlib::ShellOut.new
,恰好有timeout option你可以通过初始化!
现在,您可以使用 Opsworks自定义菜谱来覆盖初始方法,并传递相应的超时选项。 Opsworks将其base cookbooks的内容与您自定义食谱的内容合并 - 因此您只需添加&将一个文件编辑到您的自定义食谱:opsworks_commons/libraries/shellout.rb
:
module OpsWorks
module ShellOut
extend self
# This would be your new default timeout.
DEFAULT_OPTIONS = { timeout: 900 }
def shellout(command, options = {})
cmd = Mixlib::ShellOut.new(command, DEFAULT_OPTIONS.merge(options))
cmd.run_command
cmd.error!
[cmd.stderr, cmd.stdout].join("\n")
end
end
end
请注意唯一的添加内容仅为DEFAULT_OPTIONS
,并在Mixlib::ShellOut.new
调用中合并这些选项。
此方法的改进是通过主厨属性更改此超时选项,您可以通过Opsworks界面中的自定义JSON 进行更新。这意味着在初始timeout
调用中传递Opsworks::ShellOut.shellout
属性 - 而不是在方法定义中。但这取决于实际调用shellout
方法的方式......