我无法使用Engine Yard gem来处理我的Rails应用程序。在Michael Hartl的Ruby on Rails教程(第三版)的前十章之后,我将它放在了基本部分之上。虽然它可以很好地部署到Heroku,但我想切换到Engine Yard。
这是我在任何时候打电话给我的错误:
~/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似乎表明找不到发动机厂的宝石,但我还没有理解为什么。
当我在本地启动一个新项目,当我在Cloud 9上启动一个新项目,或者当我将一个新项目推送到一个repo然后将其克隆到一个单独的Cloud 9帐户时,Engine Yard gem工作正常。但是,我在Hartl教程之后构建的其他三个应用程序中出现了相同的错误,包括第1章中的hello world应用程序。
我尝试通过新项目再次通过第1章来确定是什么造成了这个问题。不幸的是,我对Hartl的hello world app的重新设计使得发动机厂的宝石完美无缺。 (该娱乐活动的演练如下。)
&#39;宝石质朴 - 所有&#39;对此错误没有影响。
我已经与Engine Yard支持团队联系了一个星期,这个问题似乎不属于宝石。由于我可以在其他Cloud 9工作空间上运行Engine Yard gem,因此Cloud 9不存在问题。
导致此错误的原因是什么,我该如何解决?
我的错误复制工作
注意:如the engineyard gem documentation所述,gem不会包含在Gemfile中。
在C9上,在Ruby框架上创建一个公共工作区(简称A),然后设置git并从A推送到BitBucket而不运行&#34; $ bundle install&#34;
现在在Ruby框架上的C9(称为B)上的单独帐户上创建第二个工作区,并从repo中克隆它。
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应用程序使用的。将工作空间A中的Gemfile内容替换为清单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]
因此,清单1.5中的这个版本的Gemfile没有问题。
步骤1.3.2告诉我们运行一个使用sass-rails 5.0.1失败的rails服务器。我在现有/已完成的hello world应用程序中用5.0.2替换了5.0.1(正如我在我的实际项目中所做的那样)。现在在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]
答案 0 :(得分:2)
此处列出了ruby-gems问题的修复程序。 https://github.com/rubygems/rubygems/issues/1420#issuecomment-169178431
尚未合并为主人。您可以降级ruby-gems或应用补丁。
答案 1 :(得分:0)
我和另一个Gem有同样的问题,问题来自ruby 2.3.0。 您必须降级到2.2.3或报告错误。
它似乎来自rubygems
https://github.com/rubygems/rubygems/issues/1420