Как перезапустить Rails изнутри Rails?

Ладно, я бы хотел создать действие в Rails для перезапуска. Я немного поискал и нашел:

http: //snippets.dzone.com/posts/show/500

Который предлагает 2 команды: одну для остановки и другую для перезапуска. Следующие убийства:

ps -a|grep "/usr/local/bin/ruby script/server"|grep -v "grep /usr"|cut -d " " -f1|xargs -n 1 kill -KILL $1

Сигнал -HUP для меня не перезапускается, поэтому я попытался изменить вышеприведенную команду (настроено так, что команда работала нормально с тем, как я запускал сервер под Ubuntu):

ps -eaf|grep "ruby script/server"|grep -v grep|cut -d " " -f3|xargs -n 1 kill -KILL $1;script/server

Это нормально работает в моей среде, поэтому я попытался настроить действие для его выполнения:

def restart
  fork { exec "ps -eaf|grep \"ruby script/server\"|grep -v grep|cut -d \" \" -f3|xargs -n 1 kill -KILL $1;script/server" }
  redirect_to "/server_maintenance"
end

Действие прекрасно убивает сервер, но фактически не запускает резервное копирование сервера:

=> Booting Mongrel
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb:12:in `initialize_without_backlog': Address already in use - bind(2) (Errno::EADDRINUSE)
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb:12:in `initialize'
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:93:in `new'
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:93:in `initialize'
    from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb:10:in `new'
    from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb:10:in `run'
    from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/server.rb:111
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from script/server:3

Я не совсем понимаю, почему адрес уже используется, когда кажется, что Mongrel только что вышел.

Я нашел этот вопрос:

Как перезапустить Rails под Mongrel, не останавливая и не запуская Mongrel

но сигналы не вызывают перезапуска в моей среде, они просто убивают процесс.

У кого-нибудь есть идеи о том, что может сработать? Несколько замечаний по моей среде: я установил Rails из новой версии RubyGems и Mongrel. Я использую скрипт / сервер для запуска сервера, который, конечно, использует Mongrel. Я на Ubuntu Hardy Heron.

Ответы на вопрос(3)

Ваш ответ на вопрос