Я обновляюсь с 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"
а затем убивает процесс определенными сигналами. Это довольно приятно, когда вы все это работаете, потому что у вас может быть нулевое время простоя развертывания (кроме миграции).
Единственное, что мне не нравится в моем скрипте: он специфичен для гемсета.
Я вижу три пути решения проблемы:
Использовать упаковщик (http://gembundler.com/rails23.html)
Используйте rvm с гемсетами (http://rvm.beginrescueend.com/gemsets/)
Используйте старую стойку (# gem uni rack -v '= 1.2.1'; gem in rack -v '= 1.1.0')