Назад | Перейти на главную страницу

Проблемы с 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"]>

Я тоже столкнулся с этой проблемой. Мы использовали 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 (если вы не укажете рабочий_directory в конфигурации). Я рекомендую использовать руководство Брэндона Тилли по обслуживание приложений 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"

а затем убивает процесс определенными сигналами. Это довольно приятно, когда вы все это работаете, потому что у вас может быть нулевое время простоя развертывания (кроме миграции).

Единственное, что мне не нравится в моем скрипте: он специфичен для гемсета.

Я вижу три пути решения проблемы: