Вопрос

Я сейчас на Dreamhost пытаюсь запустить приложение Rails 2.3.5.

Вот ситуация, на серверах Dreamhost установлен Rails 2.2.2. Конечно, я не могу обновить версию rails для общего хоста, поэтому я заморозил Rails вендора. Rails 2.3.5 требует стойки v1.0.1 gem. Dreamhost использует гем стойки v1.0.0. Поэтому, когда я пытаюсь определить:

config.gem "rack", :version => "1.0.1"

Я получаю:

can't activate rack (~> 1.0.1, runtime) for [], already activated rack-1.0.0 for []

Так что мне действительно нужно обойти запрос моего приложения на использование 1.0.1 и использовать Dreamhost 1.0.0. Кто-нибудь знает, как это настроить? Это вообще возможно? Спасибо за помощь.

Это было полезно?

Решение

Вы почти всегда захотите распаковать гемы, от которых зависит ваше приложение, в папку vendor . Вы можете сделать это с помощью этой команды rake :

rake gems:unpack:dependencies

Это создаст папку vendor / gems в корневой папке вашего приложения и распакует в нее все гемы, которые вы объявили с помощью команды config.gem .

Это не только решит вашу проблему с несовпадающими версиями rack , но также обеспечит использование тех же версий драгоценных камней в производстве, что и в разработке, что может предотвратить многие потенциальные проблемы. головные боли в будущем.

Другие советы

Dreamhost уже решил эту проблему в своей вики-поддержке.

http://wiki.dreamhost.com/ Ruby_on_Rails # Rails_2.3.5 _-_ Rack_1.0_already_activated_.28fix.29

С этой страницы:

  

При использовании Rails 2.3.5 вы получите сообщение от Пассажира о том, что Rack 1.0.1 не может быть загружен, поскольку Rack 1.0 уже активирован.

     

Один из способов решить эту проблему - заморозить Rails и распаковать гем Rack в vendor / gems / rack-1.0.1

     

Как только Rails и Rack находятся в vendor / rails и vendor / gems / rack-1.0.1, вы должны изменить action_controller в файле: vendor / rails / actionpack / lib / action_controller.rb

     

В строках с номерами 34 и 35 необходимо закомментировать и добавить следующее, чтобы загрузить стойку от vendor / gems

   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

Конечный результат должен выглядеть примерно так:

   #gem 'rack', '~> 1.0.1'
   #require 'rack'
   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

Настоящая проблема в том, что Passenger уже загружает Rack 1.0, и я считаю, что Passenger должен загрузить 1.0.1, чтобы этот хакер ушел.

rake gems: unpack: dependencies не позволяет вам распаковать rake в папку vendor / gems.

В случае с Dreamhost вы должны сделать то, что сказал Мэтт. Заморозить рельсы до 2.3.4.

rake rails:freeze:gems VERSION=2.3.4

Dreamhost использует более старую версию Passenger, которая предварительно загружает стойку 1.0.0. Вы не можете загрузить стеллаж 1.0.1 после того, как стеллаж 1.0.0 был предварительно загружен. Поэтому последняя версия rails, возможная для DH, это Rails 2.3.4 и Rack 1.0.0.

Я столкнулся с той же проблемой, когда пытался перейти на 2.3.5.

Интересно, на каком сервере вы все еще используете Rails 2.2.2? Я думал, что Dreamhost уже перевел всех на 2.3.4. Я пожаловался им 3 месяца назад, и они обновили Passenger на моем сервере на следующий день, чтобы я мог установить текущую версию Rails. Поэтому я бы порекомендовал вам подать заявку в службу поддержки, если Rails 2.3.5 жизненно важен для вашего приложения. Но изменений между 2.3.4 и 2.3.5 было немного, так что скорее всего ваше приложение будет работать так же хорошо на 2.3.4. Вы пытались запустить его на 2.3.4?

Речь идет не о пропавшем драгоценном камне, а о драгоценном камне, который требуется дважды при несовпадении версий. rake gems: unpack: зависимости это не исправляет (я пытался).

Я подозреваю, что это снова проблема с версией Dreamhost's Passenger. Мой сервер (buenosaires) имеет Passenger 2.2.5. Последняя версия для пассажиров - 2.2.7.

Простое обновление gem для rack не помогло мне, потому что кажется, что Rails 2.3.5 специально хочет Rack 1.0.1. Итак, когда я выполнил стойку обновления гема -v = 1.0.1, Rails 2.3.5 сразу запустился.

Очевидно, что все это с Rails wanting rack 1.0.1 - это небольшая ошибка в требованиях зависимостей в actionpack, которую можно решить довольно легко.

Мне было достаточно отредактировать vendor / rails / actionpack / lib / action_controller.rb в строке 34 из gem 'rack', '~ > 1.0.1 ' to gem' rack ',' ~ > 1.0 ' и проблема ушла.

См .: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3685-actionpack-235-gem-declares-incompatibility-with-rack-110

Dreamhost обновляет Rack and Rails: http: // www .dreamhoststatus.com / 2009/12/21 / рубин-гем-обновление /

Я думаю, что это решает.

Я думаю, что на данный момент лучше всего разморозить все и использовать то, что есть на мечте. В настоящее время у них есть рельсы 2.3.4, и если вы можете подождать день или два - Dreamhost обновляет гемы рельсов до 2.3.5 (его следовало обновить уже вчера, 21 декабря - но по какой-то причине они не объяснили, что это так. все еще на 2.3.4).

FWIW, я могу подтвердить, что замораживание драгоценного камня не решает проблему; на самом деле, там, где раньше мое развертывание взрывалось (с использованием Rack 0.3.0 от DH, как-то!), теперь мой раскручивается с той же ошибкой, что и выше. Возможно, пришло время перевести мое игрушечное приложение / приложение для проверки концепции на «настоящий» хостинг, если я хочу выполнить какую-либо работу.

ОБНОВЛЕНИЕ: 24 декабря 2009 года мой сервер был обновлен до Rack 1.0.1, и я решил эту проблему. Если у вас все еще возникают проблемы с вашей учетной записью, я бы порекомендовал поддержку обмена сообщениями; они были довольно отзывчивы в моем случае (с электронными письмами, а не действиями, но по цене, которую вы действительно не можете иметь все это).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top