Я не могу заставить гем 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]