2011-05-26 8 views
6

Me gustaría poder ejecutar rspec y pepino en mi aplicación de ensayo en Heroku. Tengo una aplicación de producción por separado y llevo mi rama de desarrollo a la puesta en escena y mi rama principal a la producción.¿Cómo ejecutas rspec y pepino en Heroku?

Establecí la variable RACK_ENV en 'staging' y también agregué un archivo de configuración staging.rb.

Correr rspec y pepino localmente:

Ambos funcionan rspec y pepino bien localmente mediante los comandos

$ rspec spec 

..

$ cucumber features 

Correr rspec en Heroku aplicación puesta en escena

El problema es que no puedo hacer que funcionen en mi aplicación de configuración de Heroku. Yo entiendo que la forma correcta de RSpec en Heroku es:

$ heroku rake spec --remote staging 

Siempre que tengo esto, sin embargo consigo los siguientes errores:

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) 

Operando pepino en aplicación puesta en escena Heroku

Del mismo modo :

$ heroku rake cucumber --remote staging 

Resultados en:

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) 

El problema está claramente relacionado con la base de datos, pero no estoy seguro de cómo abordarlo.

+0

¿Tiene configuraciones para 'staging' en su' database.yml'? –

+0

@Thomas sí, lo hago –

+0

¿Puede explicar por qué quiere ejecutar estos en Heroku? No es necesariamente una mala idea, ya que puede haber diferencias con su plataforma de desarrollo, pero me pregunto cuál es su idea, ya que la mayoría de la gente simplemente las ejecutará localmente y en un entorno de integración continua como Hudson. –

Respuesta

5

El problema es que las pruebas usan una base de datos separada, no aquella en la que se ejecuta la aplicación. Esta segunda base de datos que no obtienes en Heroku. Ver Running Rails unit tests on Heroku para la respuesta a una pregunta similar.

+0

Gracias por eso. Si uno solo usara una instancia separada en heroku, ¿podría usar la base de datos de producción en esa instancia para probar? –

+0

Puede crear una instancia separada para realizar pruebas, establecer el RACK_ENV como 'prueba' y luego usar la base de datos de producción (consulte http://stackoverflow.com/questions/5981508/share-database-between-2-apps-in -heroku/5981700 # 5981700), pero tenga cuidado, ejecutar las pruebas borrará la base de datos cada vez que las ejecute. – eugen

+0

Genial, gracias, intentaré eso –

Cuestiones relacionadas