Engineyard Gem 未能 运行; find_active_stub_by_path 报告未定义的方法 'this'

Engineyard Gem Failing to Run; find_active_stub_by_path Reports Undefined Method 'this'

我无法让 Engine Yard gem 处理我的 Rails 申请。我在迈克尔哈特 Ruby Rails 教程(第三版)的前十章之后整理的基本片段之上构建了它。虽然它可以很好地部署到 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 documentation 好像是找不到engineyard gem,但是一直没明白为什么。

当我在本地开始一个新项目时,当我在 Cloud 9 上开始一个新项目,或者当我将一个新项目推送到一个 repo 然后将它克隆到一个单独的云时,Engine Yard gem 工作正常9个帐户。但是,我在按照 Hartl 的教程构建的其他三个应用程序中遇到了相同的错误,包括第 1 章中的 hello world 应用程序。

我试图通过在一个新项目中再次阅读第 1 章来确定造成此问题的原因。不幸的是,我对 Hartl 的 hello world 应用程序 运行 的再造 engineyard gem 非常好。 (该游戏的演练如下。)

'gem pristine --all' 对此错误没有影响。

我已经与 Engine Yard 支持团队联系了一个星期,问题似乎不属于 gem。我可以 运行 Engine Yard gem 在其他 Cloud 9 工作空间上没有问题,这对 Cloud 9 来说不是问题。

是什么导致了这个错误,我该如何解决?


我的错误复制工作

注意:如 the engineyard gem documentation 中所述,gem 不包含在 Gemfile 中。

在 C9 上,在 Ruby 框架上创建一个 public 工作区(称为 A),然后设置 git 并从没有 运行 的 A 推送到 BitBucket宁“$捆绑安装”

现在在 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 应用程序正在使用它,但它目前正在失败。将工作区 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 告诉我们 运行 一个 rails 服务器,它因 sass-rails 5.0.1 而失败。我在 existing/completed 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]

我和另一个Gem有同样的问题,问题来自ruby 2.3.0。 您必须降级到 2.2.3 或报告错误。

好像来自rubygemshttps://github.com/rubygems/rubygems/issues/1420

此处列出的 ruby-gems 问题已得到修复。 https://github.com/rubygems/rubygems/issues/1420#issuecomment-169178431

目前还没有合并到master中。您可以降级 ruby-gems 或应用补丁。