gpt4 book ai didi

ruby-on-rails - 如何从 Rails 中重启 Rails?

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:00 28 4
gpt4 key购买 nike

好的,所以我想在 Rails 中创建一个 Action 来重新启动它自己。我做了一些搜索,发现:

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

建议使用 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 似乎刚刚退出时地址已经在使用中。

我发现了这个问题:

How do you restart Rails under Mongrel, without stopping and starting Mongrel

但信号不会导致我的环境重新启动,它们最终会终止进程。

有人对什么可行有任何想法吗?关于我的环境的一些说明:我从新版本的 RubyGems 和 Mongrel 安装了 Rails。我使用脚本/服务器来启动服务器,这当然使用了 Mongrel。我正在使用 Ubuntu Hardy Heron。

最佳答案

如果您不介意切换到 mod_rails,您可以通过创建 $RAILS_ROOT/tmp/restart.txt 来重启您的服务器,这只会导致您关心的 Rails 实例重启。

你的 PS 命令看起来(粗略地看了一下)它会杀死你机器上的所有 rails 进程。如果您是一台机器上唯一的 Rails 应用程序,那很好,但是如果有几个应用程序以同一用户身份运行,或者您以 root 身份运行,您将杀死它们。错误的形式!

This指出杂种。有你想尝试的方式。

关于ruby-on-rails - 如何从 Rails 中重启 Rails?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/724348/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com