run remove rails migrations data create column ruby-on-rails rails-migrations ruby-on-rails-4

ruby on rails - remove - ¿Por qué me piden que ejecute ''rake db: migrate RAILS_ENV=test''?



rollback migration rails (6)

A partir de Rails 4.1, las tareas de rake db:test:* están en desuso. En su lugar, su (test|spec)_helper.rb debe incluir:

ActiveRecord::Migration.maintain_test_schema!

Esto significa que su base de datos de prueba obtendrá el esquema correcto cada vez que se ejecuten sus pruebas, ya sea que las ejecute desde una tarea de Rake o no.

En Rails 4.0.0.rc1, Ruby 2.0.0, después de ejecutar una migración, veo el siguiente error cuando intento ejecutar una prueba a través de rspec :

/Users/peeja/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc1/lib/active_record/migration.rb:376:in `check_pending! '': Las migraciones están pendientes; Ejecute ''rake db: migrate RAILS_ENV = test'' para resolver este problema. (ActiveRecord :: PendingMigrationError)

Eso no parece correcto. Nadie migra su base de datos de prueba, ¿verdad? db:test:prepare , lo que, para ser justos, me olvidé de hacer. Entonces ejecuto rake db:test:prepare y ejecuto mi comando rspec nuevamente ... y veo el mismo error.

Si realmente rake db:migrate RAILS_ENV=test , el error, de hecho, desaparece.

¿Que esta pasando? ¿Es esto nuevo en Rails 4?


A veces todavía tengo problemas para resolver este problema cuando solo sigo la respuesta de una persona, así que he juntado un par para obtener mejores resultados. Estos son los pasos que tomo, no estoy seguro de cuáles son innecesarios, pero funciona al final.

  1. agregar ActiveRecord::Migration.maintain_test_schema! al principio del archivo test_helper.rb.
  2. rake test:prepare
  3. rake db:migrate
  4. rake db:migrate RAILS_ENV=test

Luego, cuando ejecuto la bundle exec rake test , obtengo resultados limpios todo el tiempo sin migraciones pendientes. (Esto es lo que hago justo después de generar el andamio la primera vez). Alguien puede corregirme si sabe con certeza que uno de estos pasos no es absolutamente necesario, pero así es como me aseguro de que funcione siempre.


He descubierto que tengo este problema cuando uso chruby para administrar mis versiones de ruby. Rieles llamadas bin/rails db:test:prepare través del comando del sistema. Esto no aprovecha chrubys $PATH env var, por lo que se ejecuta como cualquiera que sea el ruby ​​del sistema, y ​​falla debido a la falta de gemas en general. Lamentablemente, actualmente no tengo una buena solución para esto.


Parece una rake test:prepare obras, no está seguro de qué db:test:prepare now does.


Puede tratar de configurar la variable ANTES del comando, así. Esta declaración resolvió mi problema:

RAILS_ENV=test rake db:migrate


También puedes probar

rake db:migrate RAILS_ENV=test

que funciona como

db:test:prepare

hace:)