tutorial rails learn hartl ruby-on-rails railstutorial.org spork

ruby-on-rails - learn - ruby on rails tutorial



Rails 4.0 excepción de Spork/ActiveRecord (4)

Estaba recibiendo este mismo error. Creo que viene del hecho de que estaba corriendo guardia y spork al mismo tiempo. Si está siguiendo el tutorial, nunca le indica que salga de guardia antes de configurar spork. Si sale de guard y simplemente ejecuta spork y luego este comando, no obtendrá el error. El siguiente paso en el tutorial le muestra cómo ejecutar guard y spork al mismo tiempo.

He estado utilizando el Tutorial Rails de Michael Hartl para recoger Ruby on Rails y recientemente he estado revisando la nueva versión Rails 4.0 del tutorial. He encontrado un problema con Spork; Sé que estamos usando una bifurcación personalizada de Spork para compatibilidad con Rails 4.0, y que esto puede ser una incompatibilidad diferente, pero quería publicar mi problema y ver si estaba haciendo algo mal o si alguien tenía alguna idea. Cuando llamo a RSpec mientras Spork se está ejecutando, obtengo una excepción de ActiveRecord, mientras que si llamo a RSpec solo mis pruebas se ejecutan con éxito, a continuación se muestra un ejemplo de volcado de terminal

oren@VM:~/ruby_projects/test_app$ rspec Exception encountered: #<ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished> backtrace: /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:546:in `retrieve_connection'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:79:in `retrieve_connection'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/connection_handling.rb:53:in `connection'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:792:in `current_version'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:800:in `needs_migration?'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activerecord-4.0.0/lib/active_record/migration.rb:379:in `check_pending!'' /home/oren/ruby_projects/test_app/spec/spec_helper.rb:105:in `<top (required)>'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `block in load'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:11:in `block in run'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:21:in `block in initialize'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `fork'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/forker.rb:18:in `initialize'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `new'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/run_strategy/forking.rb:9:in `run'' /home/oren/.rvm/gems/ruby-2.0.0-p195@rails_4_0/gems/spork-1.0.0rc3/lib/spork/server.rb:48:in `run'' /home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1588:in `perform_without_block'' /home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1548:in `perform'' /home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'' /home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `loop'' /home/oren/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/drb/drb.rb:1622:in `block in main_loop''

Puedo proporcionar cualquier archivo desde mi aplicación si lo solicito, pero no estoy seguro de cuál sería la más útil. Básicamente, seguí los primeros pasos del Capítulo 3 del tutorial (configurar una nueva aplicación, agregar el controlador StaticPages, configurar RSpec y agregar la primera especificación) y las instrucciones para configurar Guard y Spork (Sec. 3.6.2 y 3.6 .3).

¡Gracias por tu ayuda!



Tuve el mismo problema, pero no entiendo lo que quiere decir al mover el ''entorno existente'' al bloque Spork.prefork. Por lo que puedo decir, el Listado 3.37 se supone que es un archivo completo spec / spec_helper.rb. Sin embargo, ese archivo no me funcionó: recibí el ''error de conexión no establecida''.

Edit: Ah, finalmente veo lo que quieres decir. En la versión del archivo spec / spec_helper.rb que no funcionaría para mí, hay un gran bloque de comentarios al final del archivo que se ejecuta en la parte inferior de mi editor de texto, y después de esos comentarios hay otra pregunta previa. bloque escondido Entonces, lo que debe hacer es copiar el Listado 3.37, luego abrir spec / spec_helper.rb y ''seleccionar todo'', luego pegar.

Por otro lado, el archivo spec / spec_helper.rb en github funcionó para mí. Corrí una diferencia en los dos archivos, y la versión de git hub difiere al final del bloque de prefork:

Listado 3.37:

config.order = "random" config.include Capybara::DSL end end

github

config.order = "random" # Include the Capybara DSL so that specs in spec/requests still work. config.include Capybara::DSL # Disable the old-style object.should syntax. config.expect_with :rspec do |c| c.syntax = :expect end end end

No entiendo cómo el código agregado tiene algo que ver con las conexiones, pero después de intentar el Listado 3.37 muchas veces y obtener el error de conexión, cambié el archivo a la versión github y obtuve este resultado:

$ time bundle exec rspec spec/requests/static_pages_spec.rb --drb ........ Finished in 0.19795 seconds 8 examples, 0 failures Randomized with seed 27433 real 0m5.568s user 0m3.617s sys 0m0.832s

Luego cambié spec / spec_helper.rb de nuevo a la versión en el Listado 3.37 y recibí nuevamente el error de conexión. Por lo tanto, el Listado 3.37 simplemente no funciona ( Edición: Sí, sí, vea la edición inicial).

Edición: Nota: si usa el Listado 3.37, no obtendrá los siguientes errores:

Luego, después de hacer algunos pasos más en el tutorial, noté que Guard estaba generando fallos de prueba:

Failures: 1) StaticPagesController GET ''home'' returns http success Failure/Error: response.should be_success NoMethodError: undefined method `should'' for #<ActionController::TestResponse:0x000001046dba00> # ./spec/controllers/static_pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'' 2) StaticPagesController GET ''help'' returns http success Failure/Error: response.should be_success NoMethodError: undefined method `should'' for #<ActionController::TestResponse:0x00000104700058> # ./spec/controllers/static_pages_controller_spec.rb:15:in `block (3 levels) in <top (required)>'' Finished in 0.24867 seconds 13 examples, 2 failures, 3 pending

Esos errores provienen de archivos de prueba generados automáticamente que usan un método llamado should (), que la versión github del archivo spec / spec_helper.rb deshabilitó:

# Disable the old-style object.should syntax. config.expect_with :rspec do |c| c.syntax = :expect end

Anteriormente en el tutorial, estábamos ejecutando solo las pruebas en un archivo:

spec/requests/static_pages_spec.rb

Pero ahora, Guard y Spork están configurados para ejecutar todas las pruebas en todos los archivos de prueba.

Para deshacerme de las fallas de la prueba, acabo de comentar el código en:

/spec/controllers/static_pages_controller_spec

También hay una salida de color diferente de Guard que dice:

Pending: ...

El tutorial no ha hablado de eso todavía, pero en una prueba puedes escribir ''pendiente'', como esto:

describe StaticPagesHelper do pending "add some examples to (or delete) #{__FILE__}" end

y luego, cuando ejecute las pruebas, la salida le recordará que todavía tiene que escribir la prueba mostrando la salida ''Pendiente''. Si miras en:

spec/helpers/static_pages_helper_spec.rb

de ahí viene esa prueba pendiente.


Tuve este mismo problema y lo solucioné hace unos minutos, todo era preciso en mi archivo spec / spec_helper.rb, o eso pensé. Resulta que tuve que eliminar esta copia de la parte superior del archivo que estaba oculta en la parte inferior.