Ответ 1
попробуйте перезагрузить свой сервер после редактирования в Gemfile и поставьте это: gem 'rack', '1.2.1'
Я пытаюсь запустить приложение Ruby on Rails на общем сервере Dreamhost. Все хорошо до сих пор, кроме одной странной ошибки, которую я не смог распутать.
Иногда, когда я посещаю веб-приложение, я получаю сообщение об ошибке Phusion Passenger:
Вы уже активировали стойку 1.2.1, но для вашего Gemfile требуется стойка 1.2.2. Рассмотрите возможность использования bundle exec.
Когда я просто обновляю страницу, она, похоже, работает, но больше не появляется сообщение об ошибке Phusion Passenger.
Следуя другим потокам и аналогичной Dreamhost wiki, я добавил следующее в начало файла config/environment.rb
:
if ENV['RAILS_ENV'] == 'production' # don't bother on dev
ENV['GEM_PATH'] = '/home/myusername/.gems' + ':/usr/lib/ruby/gems/1.8'
end
попробуйте перезагрузить свой сервер после редактирования в Gemfile и поставьте это: gem 'rack', '1.2.1'
Это работает в Rails 3.0.x и Passenger 3.0.15
создать файл:
config/setup_load_paths.rb
с контентом:
require 'rubygems'
require 'bundler/setup'
Затем пассажир загрузит драгоценный камень стойки, указанный в вашем файле Gemfile.lock
После длительных периодов бездействия, я получаю аналогичную ошибку для нескольких приложений Sinatra на DreamHost VPS:
Phusion Passenger Error: You have activated rack 1.2.1, but your Gemfile requires rack 1.3.0.
Как описано в @aren55555, если вы просто обновите страницу, ошибка исчезнет. Вот что я обнаружил о конфигурации сервера:
[psXXXXX]$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.6
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/XXXXXXXXX/.gems/
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /home/XXXXXXXXX/.gems/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/XXXXXXXXX/.gems/ <-- Rack 1.3.0 Gem was installed here
- /usr/lib/ruby/gems/1.8 <-- Rack 1.2.1 Gem was installed here
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
Мое предположение о том, что происходит, после того, как Passenger "просыпается", по какой-то причине он смотрит сначала (или, возможно, только) на Gems на системном уровне, выбирая Rack 1.2.1 как последнюю версию. Моим краткосрочным хакерским решением было просто установить Rack 1.3.0:
gem install rack -v 1.3.0 --install-dir /usr/lib/ruby/gems/1.8
Кажется, что сработало. Надеюсь, это полезно для всех, кто разрывает их волосы.
У меня такая же проблема: "У вас уже активирована стойка 1.2.1, но для вашего Gemfile требуется стойка 1.2.3"
удалить версии стеллажей > 1.2.1
[wasp] $gem list | grep rack
стойка (1.2.1, 1.1.0, 1.0.1, 1.0.0)
коснитесь tmp/restart.txt
Я решил этот путь на Dreamhost:
Удалить из Gemfile любую строку: gem 'rack',....
rm Gemfile.lock
rm -rf .bundle
rm -rf vendor/bundle
установить/использовать камни локально и восстановить файл "Gemfile.lock" с помощью
bundle install
установить драгоценные камни в поставщике/комплекте
bundle install --deployment
рестарт:
touch tmp/restart.txt
Я просто столкнулся с этой проблемой на Dreamhost. Проблема в том, что на сервере Dreamhost установлена стойка 1.2.1, а ваш Gemfile загружается 1.2.2. Я обнаружил, что если я просто устанавливаю стойку:
gem install rack
Тогда последняя версия стойки (1.2.2 на данный момент) будет установлена в вашу домашнюю папку gems (~/.gems). Когда пассажир запустится, он будет использовать 1.2.2.
У меня была аналогичная проблема с Apache: "У вас уже активирована стойка 1.2.3, но для вашего Gemfile требуется стойка 1.2.2. Рассмотрите возможность использования bundle exec."
Проблема заключалась в том, что Пассажир устанавливал стойку 1.2.3 и рейку APP стойку 1.2.2:
$ gem list |grep rack
rack (1.2.2, 1.2.3)
Try:
$ gem uninstall --version=1.2.3 rack
перезапустить сервер и решить
Я боролся с этой проблемой часами, прежде чем, в конце концов, отказаться от Пассажира. Любая новая версия Rails будет использовать более новую версию Rack, чем требуется Dreamhost Passenger.
Однако для загрузки приложения вам не нужен Пассажир. Dreamhost предоставляет несколько простых (и рабочих) инструкций о том, как загружать приложение с помощью FastCGI, и вам не придется повреждать ваш Gemfile в процессе:
Возможно, стоит проверить это. Кто-то сделал способ заставить отладчика работать с Passenger и Rails 3 - http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger