我无法让Engine Yard gem在我的Rails应用程序上工作。在迈克尔哈特尔的Ruby on Rails教程(第三版)的前十章之后,我已经将它建立在基本作品的基础之上。虽然它部署Heroku罚款,我想切换到引擎场。机器宝石未能运行; find_active_stub_by_path报告未定义的方法“this”
这里是我得到任何时候的错误,我打电话安永:
~/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 documentation似乎表明,EngineYard的宝石不能被发现,但我还没有明白过来为什么。
当我在本地启动一个新项目时,当我在Cloud 9上启动一个新项目时,或者当我将新项目推送到回购站时,将它克隆到单独的Cloud 9帐户,Engine Yard gem正常工作。然而,我在其他三个应用程序中收到了相同的错误,包括第1章中的Hello World应用程序。
我试图通过第1章再次讨论一个新项目来确定是什么造成了这个问题。不幸的是,我对Hartl的hello world应用程序的娱乐非常好地运行了engineyard gem。 (该娱乐的演练如下。)
'gem pristine --all'对此错误没有影响。
我一直与Engine Yard支持团队联系一周,问题似乎不属于宝石。由于我可以在其他Cloud 9工作空间上运行Engine Yard Gem而没有问题,因此它不是Cloud 9的问题。
什么是导致此错误的原因,我该如何解决?
我的错误复制努力
注:如the engineyard gem documentation指出,创业板是不包含在Gemfile中。
在C9,创建Ruby框架(简称为A)一个公共工作区,然后设置Git和推到位桶从A不运行“$包安装”
现在在一个单独的创建第二工作区在Ruby框架上的C9(称为B)帐户上,并从回购中克隆它。
B$ gem install engineyard
B$ ey --help [this was SUCCESSFUL]
B$ bundle install
B$ ey --help [this was SUCCESSFUL]
现在在A上安装engineyard gem并测试它。
A$ bundle install
A$ gem install engineyard
A$ ey --help [this was SUCCESSFUL]
现在测试列表1.5中的Gemfile,该列表由我当前正在失败的hello world应用程序使用。清单1.5替换的Gemfile的工作空间中的与内容:
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失败。我在现有的/已完成的hello world应用程序中将5.0.1替换为5.0.2(正如我在真实项目中所做的那样)。现在执行的A和B(通过库)相同的更新...
上,更新的Gemfile这样:在工作区
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]
现在:
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,像清单1.7那样运行rails服务器,编辑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]
将rubygems降级到2.5.0可以让engineyard正常工作,谢谢! – Ryan
由于[指出](https://github.com/rubygems/rubygems/issues/1420#issuecomment-256350006)在__rubygems/issues /#1420__中,现在只需运行'gem update --system '。 –