Проблемы с Unicorn 3.3.1 и Rack 1.1.0?
Я обновляю Ruby Enterprise Edition 1.8.6 до последней версии 1.8.7 с Unicorn, чтобы упростить обновление до Rails 2.3.10, и столкнулся с некоторыми проблемами. Должен ли я удалить старые версии этих драгоценных камней?
Вот сообщения журнала:
Я обновляю Ruby Enterprise Edition 1.8.6 до последней версии 1.8.7 с Unicorn, чтобы упростить обновление до Rails 2.3.10, и столкнулся с некоторыми проблемами. Должен ли я удалить старые версии этих драгоценных камней?
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"]>
2 ответа
Я тоже столкнулся с этой проблемой. Мы использовали Bundler, и это, похоже, не помогло. Некий драгоценный камень хотел использовать Rack 1.1.0, но у единорога его не было. Я не думаю, что rvm с наборами гемблов поможет, потому что два разных гема требуют двух разных версий стоек.
В конечном итоге я получил работающий сервер:
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 (если вы не указали рабочий_каталог в конфигурации). Я рекомендую использовать руководство Брэндона Тилли по обслуживанию приложений Rails с RVM, Nginx и Unicorn, хотя я не смог заставить работать корректно. Я закончил тем, что создал свой собственный скрипт /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"
а затем убивает процесс с конкретными сигналами. Очень приятно, когда вы все это заработаете, потому что вы можете иметь нулевое время развертывания (кроме миграций).
Единственное, что мне не нравится в моем сценарии: это специфический для gemset.
Я вижу три способа решения проблемы:
Используйте пакет ( http://gembundler.com/rails23.html)
Используйте rvm с наборами гемов ( http://rvm.beginrescueend.com/gemsets/)
Использовать старую стойку (# gem uni rack -v '=1.2.1'; гем в стойке -v '=1.1.0')