Kei*_*Kei 2 ruby exit-code rakefile
我希望我的Ruby脚本在某个条件下返回任何非零退出状态.退出状态本身并不重要,只要它不为零即可.我测试了它是如何完成的:
test_exit.rb:
exit 4
Run Code Online (Sandbox Code Playgroud)
test_exit_wrap.rb:
system("ruby test_exit.rb")
puts $?.exitstatus
Run Code Online (Sandbox Code Playgroud)
CMD:
> ruby test_exit_wrap.rb
4
Run Code Online (Sandbox Code Playgroud)
这太棒了,因为它正是我想要的.然后我试着在我的项目中复制它.
pullrequest.rb:
results = [install_result.class, clicks_result.class, event_result.class, tuples_result.class, match_result.class]
if results.include? NilClass
puts "result included nil"
exit 4
end
Run Code Online (Sandbox Code Playgroud)
rakefile.rb:
command = "irb #{@script} #{@app_id} #{start_date} #{end_date} #{start_time} #{end_time} #{@timezone} #{@database}"
system("#{command}")
puts $?.exitstatus
if $?.exitstatus != 0
puts "!!!!!!!!!!!!!!!!!!!!!! FAILED JOB !!!!!!!!!!!!!!!!!!!!!!!!!!"
@backjob_queue << fail
end
Run Code Online (Sandbox Code Playgroud)
CMD:
pullkochava.rb(main):032:1>
result included nil
=> nil
pullrequest.rb(main):032:0>
0
Run Code Online (Sandbox Code Playgroud)
(当然,剪掉这些,希望它仍然有意义;同样@script等于pullrequest.rb,我已经双重检查了)我们可以看到if results.include?块肯定会被执行,但是出口4似乎丢失了.0来自puts $ ?. exitstatus,我永远不会让它返回任何东西而不是0.我已经尝试过引发错误,不同的退出代码和中止.Abort确实返回非零退出代码; 然而它也中止了耙子.它将放置FAILED JOB,但是rakefile无法将@backjob_queue保存到我的数据库中.
我错过了什么吗?如何返回不会中止rake的非零退出状态?
我立即意识到了我的错误,但万一其他人需要这个答案:
你的系统命令应该是"ruby blahblahblah.rb"而不是"irb blahblahblah.rb".两者都将运行代码,但irb将返回退出状态0,除非您中止.