- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 Chef 中,为什么这段代码没有捕获 bash 资源中抛出的异常?如果我运行这段代码,即使抛出异常,我也永远不会访问 python 资源。该错误是预期的,这就是为什么我要捕获它,然后转到 pymongo 并以这种方式修复它。
begin
bash "mongo fix" do
code "mongo --verbose #{filename}"
action :run
end
rescue
python 'pymongo reconfig' do
code "Pymongo does a catch and reconfig"
end
end
这是异常输出
[2013-03-05T20:03:55+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: bash[mongo fix (noudata::mongo line 77) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '253'
---- Begin output of "bash" "/tmp/chef-script20130305-3916-14xxhn5-0" ----
STDOUT: MongoDB shell version: 2.2.3
Tue Mar 5 20:03:55 versionCmpTest passed
Tue Mar 5 20:03:55 versionArrayTest passed
connecting to: test
Tue Mar 5 20:03:55 creating new connection to:127.0.0.1:27017
Tue Mar 5 20:03:55 BackgroundJob starting: ConnectBG
Tue Mar 5 20:03:55 connected connection!
true
{
"errmsg" : "replSetReconfig command must be sent to the current replica set primary.",
"ok" : 0
}
Tue Mar 5 20:03:55 uncaught exception: [object bson_object]
failed to load: /tmp/test.js
STDERR:
---- End output of "bash" "/tmp/chef-script20130305-3916-14xxhn5-0" ----
Ran "bash" "/tmp/chef-script20130305-3916-14xxhn5-0" returned 253
最佳答案
begin
block 中的代码创建一个 Chef::Resource::Bash
资源的实例,分配资源的 code
和 action
属性,并将资源添加到run_context.resource_collection
。该资源在任何意义上都不是“运行”的。创建资源实例不会引发任何异常,因此 rescue
block 中的代码不会运行。
稍后,一旦您的所有 Recipe 代码运行完毕,Chef 将遍历 run_context.resource_collection
中的资源。对于每个资源,Chef 将运行资源的操作。对于 bash
资源,这意味着运行资源的 code
属性中给定的字符串。请注意,这发生在您的 Recipe 和所有其他 Recipe 完成运行之后,因此它发生在您的 begin
block 之外。此资源在其操作运行时引发的任何异常都不会传播到您的 begin
block ,因为这些操作不是从您的 begin
block 内调用的,而是从它之后调用的.
你可以尝试这样的事情:
bash "mongo fix" do
code "mongo --verbose #{filename} || python pymongo reconfig"
end
关于ruby - 在 Chef 中,为什么没有挽救引发的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233191/
我阅读了博文 JRuby Performance: Exceptions are not flow control提倡在特殊情况下避免使用异常。 我意识到我犯了定期使用 rescue 处理 LoadE
我在 Controller 中有这个: pickuptime = params[:appointment][:pickuptime] pickuptime = DateTime.strptime(pi
我正在使用 Rails gem 通过 RestClient 向 api 发送请求。我需要挽救 401 错误代码。我在 RestClient 文档中看到了以下内容: > RestClient.get('
根据这篇文章: http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/ 处理错误
我是一名优秀的程序员,十分优秀!