问题描述
|
我希望能够在Heroku上的我的登台应用程序上运行rspec和黄瓜。我有一个单独的生产应用程序,我将开发部门推向登台,将主分支推向生产。
我已经将RACK_ENV变量设置为\'staging \',并且还添加了一个staging.rb配置文件。
在本地运行rspec和黄瓜:
使用以下命令,rspec和cucumber在本地均可正常运行
$ rspec spec
..
$ cucumber features
在Heroku登台应用程序上运行rspec
问题是我无法让它们在我的Heroku登台应用程序上运行。我了解在Heroku上进行rspec的正确方法是:
$ heroku rake spec --remote staging
每当我运行此命令时,都会出现以下错误:
rake aborted!
You have a nil object when you didn\'t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/railties/databases.rake:429:in `block (3 levels) in <top (required)>\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `call\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `block in execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:581:in `invoke\'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/railties/databases.rake:460:in `block (3 levels) in <top (required)>\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `call\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `block in execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:581:in `invoke\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2013:in `top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1992:in `run\'
/usr/ruby1.9.2/bin/rake:31:in `<main>\'
(in /app)
在Heroku分期应用程序上运行黄瓜
类似地:
$ heroku rake cucumber --remote staging
结果是:
rake aborted!
You have a nil object when you didn\'t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/railties/databases.rake:429:in `block (3 levels) in <top (required)>\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `call\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `block in execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:581:in `invoke\'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/railties/databases.rake:460:in `block (3 levels) in <top (required)>\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `call\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `block in execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `execute\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:581:in `invoke\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `each\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2013:in `top_level\'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1992:in `run\'
/usr/ruby1.9.2/bin/rake:31:in `<main>\'
(in /app)
问题显然与数据库有关,但我不确定如何解决。
解决方法
问题在于测试使用的是单独的数据库,而不是运行应用程序的数据库。您在Heroku上没有的第二个数据库。有关类似问题的答案,请参见Heroku上的Running Rails单元测试。