独角兽挂着说刷新宝石
Posted
技术标签:
【中文标题】独角兽挂着说刷新宝石【英文标题】:unicorn hangs saying Refreshing Gems 【发布时间】:2011-11-04 12:38:00 【问题描述】:从乘客迁移到独角兽后,我在分期时遇到了一个奇怪的问题。
我为开发和登台环境配置了独角兽。 它在开发中工作,但不在分期中。在开发中,它监听 8080,而在分阶段监听 unix 套接字。这会有什么不同吗?特别是在生产环境中?
这就是我在暂存中运行它时发生的情况
-
启动时几乎占用 100% 的 CPU
有时它会稳定下来,我可以使用它
*但大多数时候它挂起**,我不得不杀死它。
我已经记录了一个关于这个问题的问题click here
这是我在 unicorn.stderr.log 中看到的
I, [2011-08-26T09:02:53.324286 #5026] INFO -- : unlinking existing socket=/home/krishnaprasad/project_name/tmp/sockets/unicorn.sock
I, [2011-08-26T09:02:53.324502 #5026] INFO -- : listening on addr=/home/krishnaprasad/project_name/tmp/sockets/unicorn.sock fd=3
I, [2011-08-26T09:02:53.324860 #5026] INFO -- : Refreshing Gem list
为什么它会尝试刷新宝石? 有没有办法在配置文件中避免它?
这是我在 config/unicorn_staging.rb 中的内容
# unicorn_rails -c /config/unicorn_staging.rb -E staging -D
rails_env = 'staging'
working_directory "/home/krishnaprasad/Projects/project_name"
worker_processes 1
preload_app true
timeout 90
rails_root = "/home/krishnaprasad/Projects/project_name"
listen "#rails_root/tmp/sockets/unicorn.sock", :backlog => 2048
pid "#rails_root/tmp/pids/unicorn.pid"
stderr_path "#rails_root/log/unicorn.log"
stdout_path "#rails_root/log/unicorn.log"
GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
before_fork do |server, worker|
ActiveRecord::Base.connection.disconnect!
old_pid = "#Rails.root/tmp/pids/unicorn.pid.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
# someone else did our job for us
end
end
end
after_fork do |server, worker|
ActiveRecord::Base.establish_connection
end
高度赞赏任何帮助。 提前致谢
【问题讨论】:
你有没有想过这个问题?我遇到了同样的问题。 我删除了这一行,发现它有些工作但仍然很慢 after_fork do |server, worker| ActiveRecord::Base.establish_connection 结束 似乎删除该行会导致独角兽子进程中的共享数据库句柄出现问题。我最终无法使用预加载应用程序在守护程序模式下运行 Unicorn。一旦我禁用了预加载应用程序,它就会停止导致问题。 PS - 我使用的是 Sinatra 而不是 Rails,但遇到的问题似乎和你一样,所以它可能不是特定于框架的。 【参考方案1】:确保您的代码没有语法错误!
对我来说,修复语法错误(在我的一个控制器中)结束了循环并正确启动了 Unicorn。我在 Unicorn 中没有收到任何错误消息,您可能想尝试开始使用 WebRat 并查看是否弹出错误。
【讨论】:
【参考方案2】:对我来说,是数据库连接配置不正确。似乎有时它会在控制台上报告这个,有时它只是旋转。
【讨论】:
以上是关于独角兽挂着说刷新宝石的主要内容,如果未能解决你的问题,请参考以下文章