我惊讶地发现,当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
这是故意的吗?深入研究源代码,这似乎只是简单地调用execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}"
。这会在失败时引发错误。我想念什么?
这是在Rails 5中解决的问题:PR#19924对于创建和删除失败,以状态“ 1”显式退出
最好的解决方案是使用Rails5。:)否则,您将陷入以下问题之一:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句