【发布时间】:2016-04-05 23:54:11
【问题描述】:
我惊讶地发现,当rake db:drop(假设是 Rails 的其他内置 raketasks)失败时,bash 状态码为 0。
$ rake db:drop
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
...
$ echo $?
0
也许更令人惊讶的是,当从 Rails 中调用任务时,它甚至不会引发错误。
2.3.0 :001 > begin
2.3.0 :002 > Rake::Task["db:drop"].invoke
2.3.0 :003 > puts "After raketask invoked"
2.3.0 :004 > end
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
...
After raketask invoked
这是故意的吗?深入研究source,这似乎只是调用execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}"。这应该raise an error 失败。我错过了什么?
【问题讨论】:
-
你不想要
$?而不是$!? -
很好,把错误编辑掉了,谢谢。
-
您缺少的是拉取请求和对 Ruby 开发人员如何处理 Unix(如操作系统)中的错误以及如何设置 CLI 应用程序(如 rake)的退出值的参考 :)
-
我认为这是 Rails 级别的问题,而不是 Ruby 级别的问题:当通用 raketask 失败时,它会给出非零退出代码。
-
@Istvan:也许我错过了你的观点。您的意思是暗示这是一个真正的错误,我应该向 Rails 提交修复吗?我认为这是有充分理由的,我忽略了!
标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord