![Unicorn 3.3.1 和 Rack 1.1.0 有问题吗?](https://linux22.com/image/538076/Unicorn%203.3.1%20%E5%92%8C%20Rack%201.1.0%20%E6%9C%89%E9%97%AE%E9%A2%98%E5%90%97%EF%BC%9F.png)
我正在使用 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
我认为解决这个问题有三种方法:
使用 rvm 与 gemsets (http://rvm.beginrescueend.com/gemsets/)
使用旧机架(# gem uni rack -v '=1.2.1'; gem in rack -v '=1.1.0')