How do you manage rspec and cucumber on Heroku?

I would like to be able to run rspec and cucumber in my intermediate application on Heroku. I have a separate application for production, and I push my development branch to the stage, and my main branch - to production.

I set the RACK_ENV variable to 'staging' and also added the staging.rb configuration file.

Running rspec and cucumber locally:

Both rspec and cucumber execute normally locally using commands

$ rspec spec 

..

 $ cucumber features 

Running rspec in Heroku hosting app

The problem is that I cannot get them to run in my Heroku hosting application. I understand that the correct path to rspec on Heroku is:

 $ heroku rake spec --remote staging 

Whenever I run this, I get the following errors:

 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) 

Launching a cucumber on an application for placing Heroku

Similarly:

 $ heroku rake cucumber --remote staging 

Results in:

 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) 

The problem is clearly related to the database, but I'm not sure how to solve it.

+6
source share
1 answer

The problem is that when testing, a separate database is used, and not the one on which the application runs. This is the second database you cannot get on Heroku. For an answer to a similar question, see Heroku Rails Performance Tests .

+5
source

Source: https://habr.com/ru/post/889102/


All Articles