Обход ошибки версии стойки с помощью Rails 2.3.5 - PullRequest
8 голосов
/ 29 ноября 2009

Я сейчас на 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. Кто-нибудь знает, как это настроить? Это вообще возможно? Спасибо за помощь.

Ответы [ 9 ]

6 голосов
/ 13 февраля 2010

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 необходимо закомментировать и добавить следующую строку для загрузки стойки от продавца / драгоценных камней

   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"

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

4 голосов
/ 17 декабря 2009

rake gems:unpack:dependencies не позволяет вам распаковать рейк в папку 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.

1 голос
/ 25 января 2012

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

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

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

1 голос
/ 22 марта 2010

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

1 голос
/ 30 ноября 2009

Я столкнулся с той же проблемой, когда пытался перейти на 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.

0 голосов
/ 22 декабря 2009

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

0 голосов
/ 18 декабря 2009

Dreamhost обновляет Rack and Rails: http://www.dreamhoststatus.com/2009/12/21/ruby-gem-updates/

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

0 голосов
/ 11 декабря 2009

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

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

0 голосов
/ 29 ноября 2009

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

rake gems:unpack:dependencies

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

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

...