Unicorn 3.3.1 和 Rack 1.1.0 有问题吗?

Unicorn 3.3.1 和 Rack 1.1.0 有问题吗?

我正在使用 Unicorn 将 Ruby Enterprise Edition 1.8.6 升级到最新的 1.8.7 版本,以便升级到 Rails 2.3.10,但遇到了一些问题。我应该卸载这些 gem 的旧版本吗?

以下是日志消息:

我正在使用 Unicorn 将 Ruby Enterprise Edition 1.8.6 升级到最新的 1.8.7 版本,以便升级到 Rails 2.3.10,但遇到了一些问题。我应该卸载这些 gem 的旧版本吗?

I, [2011-02-02T22:06:16.328076 #30672]  INFO -- : listening on addr=0.0.0.0:8080 fd=3
I, [2011-02-02T22:06:16.333137 #30672]  INFO -- : Refreshing Gem list
/srv/ree/bin/unicorn_rails must be run inside RAILS_ROOT: #<Gem::LoadError: can't activate rack (~> 1.1.0, runtime) for ["actionpack-2.3.10", "rails-2.3.10"], already activated rack-1.2.1 for ["unicorn-3.3.1"]>
I, [2011-02-02T22:07:12.259436 #30701]  INFO -- : listening on addr=0.0.0.0:8080 fd=3
I, [2011-02-02T22:07:12.259952 #30701]  INFO -- : Refreshing Gem list
/srv/ree/bin/unicorn_rails must be run inside RAILS_ROOT: #<Gem::LoadError: can't activate rack (~> 1.1.0, runtime) for ["actionpack-2.3.10", "rails-2.3.10"], already activated rack-1.2.1 for ["unicorn-3.3.1"]>
I, [2011-02-02T22:09:27.787177 #30772]  INFO -- : listening on addr=0.0.0.0:8080 fd=3
I, [2011-02-02T22:09:27.787691 #30772]  INFO -- : Refreshing Gem list
/srv/ree/bin/unicorn_rails must be run inside RAILS_ROOT: #<Gem::LoadError: can't activate rack (~> 1.1.0, runtime) for ["actionpack-2.3.10", "rails-2.3.10"], already activated rack-1.2.1 for ["unicorn-3.3.1"]>
I, [2011-02-02T22:10:44.175407 #30846]  INFO -- : listening on addr=0.0.0.0:8080 fd=3
I, [2011-02-02T22:10:44.175928 #30846]  INFO -- : Refreshing Gem list
/srv/ree/bin/unicorn_rails must be run inside RAILS_ROOT: #<Gem::LoadError: can't activate rack (~> 1.1.0, runtime) for ["actionpack-2.3.10", "rails-2.3.10"], already activated rack-1.2.1 for ["unicorn-3.3.1"]>

答案1

我也遇到过这个问题。我们使用的是 Bundler,但似乎没有帮助。某个 gem 想要使用 Rack 1.1.0,但 unicorn 不允许。我认为带有 gemsets 的 rvm 不会有帮助,因为两个不同的 gem 需要两个不同版本的 rack。

最终我得到了一个运行的生产服务器:

Rails 2.3.10
Ruby Enterprise Edition 1.8.7
Bundler 1.0.10
Unicorn 3.1.0
Rack 1.1.0

您必须卸载 Rack 1.2.1。我还在使用unicorn_rails将我的 rails 应用程序包装在 rack 中的版本。我不确定这是否有必要,但我无法使用特定于 rack 的应用程序 (dragonfly) 使我的 rails 路由正常工作。

此外,您需要从 rails 目录的根目录运行该命令(除非您在配置中指定 working_directory)。我建议使用 Brandon Tilley 的指南使用 RVM、Nginx 和 Unicorn 提供 Rails 应用尽管我无法让 upstart 正常工作。我最终制作了自己的 /etc/init.d/unicorn_test_app 脚本,该脚本基本上只运行:

rvm_path=/usr/local/rvm \
/usr/local/bin/rvm-shell "ree-1.8.7-2011.03@test_app_rails2" -c \
"/usr/local/rvm/gems/ree-1.8.7-2011.03@test_app_rails2/bin/unicorn_rails \
-D -E production -c /var/www/test_app/config/unicorn.rb"

然后使用特定信号终止该进程。一旦一切正常,这真是太棒了,因为您可以实现零停机部署(迁移除外)。

我唯一不喜欢我的脚本的地方是:它是特定于宝石集的。

答案2

我认为解决这个问题有三种方法:

相关内容