Rails 2.x mongrel не запустится после обновления до rails 3. - mongrel_rails (MissingSourceFile) - PullRequest
4 голосов
/ 08 марта 2011

После обновления моей установки Rails до Rails 3 на OS X у меня возникли проблемы при запуске сайтов разработки Rails 2.x с Mongrel. WEBrick, кажется, работает, но я действительно хотел бы получить хороший вывод Mongrel для отладки.

После запуска $ script/server я получаю это:

/Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load': no such file to load -- mongrel_rails (MissingSourceFile)
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
from /Library/Ruby/Gems/1.8/gems/rails-2.0.2/lib/commands/servers/mongrel.rb:64
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:49:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:49:in `require'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
from /Library/Ruby/Gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:49:in `gem_original_require'

Пока вот что я попробовал:

$ sudo gem update system
$ sudo gem update
$ sudo gem uninstall mongrel
$ sudo gem install mongrel --include-dependencies
$ which mongrel_rails

/usr/bin/mongrel_rails

$ mongrel_rails start

→ Успех, но без упора

$ which mongrel_rails

/usr/bin/mongrel_rails

$ rails _2.0.2_ test

→ У свежего приложения такая же проблема.

  • ОС: OS X.6.x
  • Rails: 3.0.5 (проблемы с приложениями Rails 2.x)
  • gem -v: 1.6.1
  • Дворняга: дворняга (1.1.5)

Я прочитал КАЖДЫЙ результат Google на "- mongrel_rails (MissingSourceFile)"; их не много.

Может кто-нибудь здесь сказать мне, как продолжить отладку этого? Спасибо!

UPDATE:

Я сейчас попытался установить более старые версии гема и указать их в файле config/environment.rb моего сайта Rails 2.x. Я пробовал 1.1.5, 1.1.4 и 1.2.0pre.

Ничто из этого не имеет никакого значения.

С момента запуска исполняемого файла в usr/bin Мне интересно, не связана ли проблема с владением файлом при моей установке Rails 3 и не получает ли один из файлов мои пути при запуске?

/Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb принадлежит admin / root, так что все должно быть в порядке, верно?

Может ли быть проблема с active_support!?

Вот код из dependencies.rb, который выдает ошибку:

484 class Object
485   
486  alias_method :load_without_new_constant_marking, :load
487  
488  def load(file, *extras) #:nodoc:
489    Dependencies.new_constants_in(Object) { super(file, *extras) }
490  rescue Exception => exception  # errors from loading file
491     exception.blame_file! file
492     raise
493   end
...  

При получении файла не найдена ошибка, поэтому он не смотрит, откуда я знаю, что файл находится… Запуск mongrel_rails в командной строке работает… Какой mongrel_rails показывает это в usr/bin, Так в чем же проблема?

Ответы [ 8 ]

6 голосов
/ 15 марта 2011

У меня та же проблема, и я нашел причину.

Это происходит потому, что новая версия RubyGems (1.6.2) не добавляет 'any_gem / bin' в путь загрузки ruby ​​($ LOAD_PATH), когда вам требуется "any_gem".

Например, в версии RubyGems = 1.4.1 это работает нормально. После того, как мне потребуется «монгрел», я вижу в пути загрузки следующее:

  • ... RVM / драгоценные камни / рубиново-1.8.7-P330 / драгоценные камни / дворняга-1.1.5 / бен
  • ... RVM / камни / рубин-1.8.7-P330 / драгоценные камни / дворняга-1.1.5 / Библиотека
  • ... rvm / gems / ruby-1.8.7-p330 / gems / mongrel-1.1.5 / ext

В новой версии (1.6.2) я вижу только:

  • ... RVM / камни / рубин-1.8.7-P330 / драгоценные камни / дворняга-1.1.5 / Библиотека
  • ... RVM / камни / рубин-1.8.7-P330 / драгоценные камни / дворняга-1.1.5 / вн

Именно поэтому ruby ​​не может найти 'mongrel_rails'.

4 голосов
/ 20 апреля 2011

Вам необходимо добавить "/ usr / bin" в ваш путь загрузки. Возможно, что-то сломалось в этом?

Лучший способ исправить это добавить:

$:.push("/usr/bin/")

Где-то, прежде чем он сломается. Вероятно, сам по себе в файле config / preinitializer.rb, если у вас его нет.

3 голосов
/ 11 марта 2011

ОК, вот ОДИН ответ. У меня есть монгрел для загрузки ... но он взломан и не решает реальную проблему ... но по крайней мере сейчас, я могу вернуться к работе над этим проектом.

Вот что я сделал ... ДА .. это ХАКИ.

Я отредактировал файл, выдавший ошибку ... dependencies.rb

Я добавил хук, чтобы вызвать конкретный путь к рельсам монгрел, если это был файл, который он пытался загрузить.

def load(file, *extras) #:nodoc:

if file == "mongrel_rails"
  file ="/usr/bin/mongrel_rails"
end
Dependencies.new_constants_in(Object) { super(file, *extras) }
  rescue Exception => exception  # errors from loading file
  exception.blame_file! file
  raise
end

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

2 голосов
/ 08 марта 2011

Я определенно хотел бы использовать RVM для одновременного локального запуска нескольких версий гемов.Я столкнулся с множеством извращений, когда пытался запустить несколько версий, как у вас, с установками sudo gem всего.

Теперь это так же просто, как rvm ree@my_app_1, и установка там совершенно отдельных гемов с последующим переключением надругое приложение и использующее rvm ree@my_app_2

ree является псевдонимом для моей установки корпоративной версии ruby, вы также можете легко сделать это с ruby ​​1.9, 1.8.x и т. д.

InВ каждом из корневых каталогов моего приложения у меня есть файл .rvmrc, который читается просто:

rvm ree@my_app --create

Так что каждый раз, когда я переключаюсь на этот каталог, набор гемов автоматически заменяется для меня.

1 голос
/ 23 сентября 2011

Я столкнулся с той же ошибкой. Исправление состоит в том, чтобы добавить каталог «bin» монгрела в $ LOAD_PATH. В других статьях описывается, как это сделать путем изменения исходного кода, но, поскольку я делюсь исходным кодом с другими разработчиками, я предпочитаю вместо этого устанавливать переменную среды RUBYLIB.

$ export RUBYLIB=/Users/edwingo/.rvm/gems/ruby-1.8.7-p302@junction/gems/mongrel-1.1.5/bin

Это приводит к тому, что среда выполнения MRI ruby ​​добавляет ее к $ LOAD_PATH.

Подробное объяснение: МРТ не может найти 'mongrel_rails', потому что его нет в $ LOAD_PATH. Я использую RVM, и когда я установил mongrel в набор гемов, по какой-то причине $ LOAD_PATH не включает в себя соответствующий каталог bin, где живет mongrel_rails. Когда не с использованием RVM и после установки mongrel в системные гемы, каталог «bin» появляется в $ LOAD_PATH, поэтому он все работает.

1 голос
/ 18 апреля 2011

Это поток, в котором вы можете найти лучший ответ на ошибку mongrel_rails (MissingSourceFile). Я просто хочу заключить здесь, как я решил проблему, используя материал в этой теме.

Самое простое решение, которое я смог выяснить, это понизить RubyGems, набрав

(sudo) gem update --system 1.4.1

Это позволяет мне запустить старое приложение 2.1.0 (спасибо Максу Шытикову), но, вероятно, есть много исправлений, которые мне не хватает при запуске старой версии rubygems. Вероятно, ошибка является ошибкой разработчиков драгоценных камней (Mongrel).

В любом случае, если вы просто хотите запустить свое приложение, используя mongrel, сделайте это так. Если вы настаиваете на использовании новейшей версии rubygems, вы можете просто запустить свое приложение с

script/server webrick

Но я обнаружил, что вебрик немного медленнее, поэтому я предпочитаю дворнягу. Если у кого-то есть лучшее решение этой проблемы, пожалуйста, дайте мне знать.

1 голос
/ 21 марта 2011

Я столкнулся с той же проблемой - запустил мое приложение, запустив "mongrel_rails" из каталога проекта (вместо "script / server").

1 голос
/ 10 марта 2011

Я не знал, что там была поддержка Rails 3 mongrel.

Большинство людей используют Thin (вы можете включить его, указав gem 'thin' в вашем Gemfile, а затем запустив rails server thin / Webrick в эти дни.

Если это для хостинга, то есть nginx и Passenger, которые помогут с этим.

...