Драгоценный камень на машинном дворе не работает; find_active_stub_by_path Сообщает о неопределенном методе 'this'

Я не могу заставить гем Engine Yard работать с моим приложением Rails. Я построил его на основе основных частей, которые я собрал, следуя первым десяти главам учебника по Ruby on Rails от Michael Hartl (третье издание). Хотя он отлично развертывается на Heroku, я хочу переключиться на Engine Yard.

Вот ошибка, которую я получаю каждый раз, когда звоню ey:

~/workspace (development) $ ey --help
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/specification.rb:2158:in `method_missing': undefined method `this' for #<Gem::Specification:0x52e978 engineyard-3.2.1> (NoMethodError)
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/specification.rb:1057:in `find_active_stub_by_path'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:64:in `require'
        from /usr/local/rvm/gems/ruby-2.3.0/gems/engineyard-3.2.1/bin/ey:3:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.3.0/bin/ey:23:in `load'
        from /usr/local/rvm/gems/ruby-2.3.0/bin/ey:23:in `<main>'
        from /usr/local/rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval'
        from /usr/local/rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `<main>'

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

Драгоценный камень Engine Yard отлично работает, когда я запускаю новый проект локально, когда я запускаю новый проект в Cloud 9 или когда я помещаю новый проект в репозиторий, а затем клонирую его в отдельную учетную запись Cloud 9. Тем не менее, я получаю идентичные ошибки в трех других приложениях, которые я создал в соответствии с руководством Хартла, включая приложение hello world из главы 1.

Я попытался определить, что создает эту проблему, снова пройдя главу 1 с новым проектом. К сожалению, мое воссоздание приложения Hello World от Hartl прекрасно работает с драгоценным камнем машинного двора. (Прохождение этой игры приведено ниже.)

'gem pristine --all' не влияет на эту ошибку.

Я связался со службой поддержки Engine Yard в течение недели, и проблема, похоже, не связана с драгоценным камнем. Поскольку я могу без проблем запустить гем Engine Yard в других рабочих пространствах Cloud 9, с Cloud 9 это не проблема.

Что вызывает эту ошибку и как ее исправить?


Мои попытки воспроизвести ошибку

ПРИМЕЧАНИЕ. Как указано в документации по гему Engineyard, гем не должен включаться в Gemfile.

На C9 создайте общедоступную рабочую область в среде Ruby (обозначается как A), затем настройте git и нажмите на BitBucket из A, не запуская «установку пакета $».

Теперь создайте вторую рабочую область в отдельной учетной записи на C9 (называемой B) в среде Ruby и клонируйте ее из репозитория.

B$ gem install engineyard
B$ ey --help  [this was SUCCESSFUL]
B$ bundle install
B$ ey --help  [this was SUCCESSFUL]

Теперь установите камень машинного двора на A и протестируйте его.

A$ bundle install
A$ gem install engineyard
A$ ey --help [this was SUCCESSFUL]

Теперь протестируйте Gemfile в листинге 1.5, который используется моим приложением hello world, которое в настоящее время дает сбой. Замените содержимое Gemfile в рабочей области A содержимым из листинга 1.5:

gem 'rails', '4.2.0'
gem 'sass-rails', '5.0.1'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc

group :development, :test do
  gem 'sqlite3', '1.3.9'
  gem 'byebug', '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring', '1.1.3'
end

Теперь запустите это:

A$ bundle install
A$ ey --help [this was SUCCESSFUL]
A$ git add -A
A$ git commit -m "Make Gemfile equal to Hartl's Listing 1.5"
A$ git push
B$ git pull
B$ bundle install
B$ ey --help [this was SUCCESSFUL]

Так что эта версия Gemfile в листинге 1.5 не вызывает проблем.

Шаг 1.3.2 говорит нам запустить сервер rails, который не работает с sass-rails 5.0.1. Я заменил 5.0.1 на 5.0.2 в своем существующем/завершенном приложении hello world (как я сделал в своем реальном проекте). Теперь выполните такое же обновление на A и B (через репозиторий)...

На A обновите Gemfile до этого:

gem 'rails', '4.2.0'
gem 'sass-rails', '5.0.2'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc

group :development, :test do
  gem 'sqlite3', '1.3.9'
  gem 'byebug', '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring', '1.1.3'
end

Теперь запустите это:

A$ bundle install
A$ ey --help [this was SUCCESSFUL]
A$ git add -A
A$ git commit -m "Upgrade sass-rails to 5.0.2"
A$ git push
B$ git pull
B$ ey --help [this was SUCCESSFUL]

Теперь в рабочей области A запустите сервер rails, как в листинге 1.7, отредактируйте application_controller, как в листинге 1.8, измените маршруты, как в листинге 1.10, и протестируйте его. Работает как положено. Теперь нажмите и проверьте на B...

A$ ey --help [this was SUCCESSFUL]
A$ git add -A
A$ git commit -m "Listings 1.7, 1.8, and 1.10"
A$ git push
B$ git pull
B$ ey --help [this was SUCCESSFUL]

person Ryan    schedule 10.02.2016    source источник


Ответы (2)


Здесь есть исправление проблемы с рубиновыми драгоценными камнями. https://github.com/rubygems/rubygems/issues/1420#issuecomment-169178431

Он еще не был объединен с мастером. Вы можете либо понизить версию ruby-gems, либо применить патч.

person Chris Zimmerman    schedule 11.02.2016
comment
Понижение версии rubygems до 2.5.0 позволяет Engineyard нормально работать, спасибо! - person Ryan; 11.02.2016
comment
Как указано в rubygems/issues/#1420< /b> теперь эту проблему можно решить автоматически, просто запустив gem update --system. - person Josh Habdas; 04.12.2016

У меня такая же проблема с другим Gem, проблема связана с ruby ​​​​2.3.0. Вы должны перейти на 2.2.3 или сообщить об ошибке.

Кажется, это исходит от rubygems https://github.com/rubygems/rubygems/issues/1420

person Jonathan Vukovich-Tribouharet    schedule 11.02.2016