【发布时间】:2016-02-10 23:19:45
【问题描述】:
我无法让 Engine Yard gem 在我的 Rails 应用程序上运行。我在 Michael Hartl 的 Ruby on 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 上启动新项目或将新项目推送到存储库然后将其克隆到单独的 Cloud 9 帐户时,Engine Yard gem 可以正常工作。但是,我在按照 Hartl 的教程构建的其他三个应用程序中遇到了相同的错误,包括第 1 章中的 hello world 应用程序。
我试图通过重新阅读第 1 章的新项目来确定造成此问题的原因。不幸的是,我对 Hartl 的 hello world 应用程序的重新创建运行 engineyard gem 非常好。 (该游戏的演练如下。)
'gem pristine --all' 对这个错误没有影响。
我已经与 Engine Yard 支持团队联系了一个星期,问题似乎不属于 gem。因为我可以在其他 Cloud 9 工作空间上毫无问题地运行 Engine Yard gem,所以 Cloud 9 没有问题。
是什么导致了这个错误,我该如何解决?
我的错误复制工作
注意:如the engineyard gem documentation 中所述,gem 不包含在 Gemfile 中。
在 C9 上,在 Ruby 框架上创建一个公共工作区(简称 A),然后设置 git 并从 A 推送到 BitBucket 而不运行“$ bundle install”
现在在 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 告诉我们运行一个 rails 服务器,它在 sass-rails 5.0.1 中失败。我在现有/已完成的 hello world 应用程序中将 5.0.1 替换为 5.0.2(正如我在实际项目中所做的那样)。现在对 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 上,按照清单 1.7 运行 rails 服务器,按照清单 1.8 编辑 application_controller,按照清单 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]
【问题讨论】:
标签: ruby-on-rails ruby rubygems cloud9-ide engineyard