Byłem zaskoczony, aby dowiedzieć się, że gdy rake db:drop
(i przypuszczalnie Szyny inne wbudowane w raketasks) nie powiedzie się, kod stanu bash jest 0.Dlaczego "rake db: drop` ma status wyjścia 0 i nie wywołuje błędu, gdy się nie powiedzie?
$ 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
Być może bardziej zaskakujące, że nawet nie podnieść błąd gdy zadanie jest wywoływane z poziomu 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
Czy jest to zamierzone? Kopiowanie do source, wydaje się, że po prostu zadzwoń execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}"
. To powinno być raise an error po awarii. czego mi brakuje?
Nie chcesz '$?' '$ i nie!'? – Shelvacu
Dobry połów, zredagowałem błąd, dzięki. –
To, czego brakuje, to żądanie ściągnięcia i referencje do deweloperów Ruby, jak radzić sobie z błędami w systemach typu Unix, jak i jak ustawić wartość wyjściową aplikacji CLI jak rake :) – Istvan