IT story

'rake db : migrate RAILS_ENV = test'를 실행하라는 메시지가 표시되는 이유는 무엇입니까?

hot-time 2020. 12. 29. 07:55
반응형

'rake db : migrate RAILS_ENV = test'를 실행하라는 메시지가 표시되는 이유는 무엇입니까?


Rails 4.0.0.rc1, Ruby 2.0.0에서 마이그레이션을 실행 한 후 테스트를 실행하려고하면 다음 오류가 표시됩니다 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! ': 마이그레이션이 보류 중입니다. 이 문제를 해결하려면 'rake db : migrate RAILS_ENV = test'를 실행하십시오. (ActiveRecord :: PendingMigrationError)

그것은 옳지 않은 것 같습니다. 아무도 테스트 데이터베이스를 마이그레이션하지 않습니까? 그들은 db:test:prepare그것이 공정 들려요이해야 할 잊어 수-합니다. 그래서 명령을 다시 실행 rake db:test:prepare하고 실행 rspec하면 같은 오류가 나타납니다.

내가 실제로이라면 rake db:migrate RAILS_ENV=test오류는 실제로 사라집니다.

무슨 일이야? Rails 4의 새로운 기능입니까?


Rails 4.1부터 rake db:test:*태스크는 더 이상 사용되지 않습니다. 대신 다음 (test|spec)_helper.rb을 포함해야합니다.

ActiveRecord::Migration.maintain_test_schema!

즉, Rake 작업에서 실행했는지 여부에 관계없이 테스트가 실행될 때마다 테스트 데이터베이스가 올바른 스키마를 가져옵니다.


rake test:prepare작품 처럼 보이지만 db:test:prepare지금은 무엇을하는지 잘 모르겠습니다 .


나는 한 사람의 대답을 따를 때이 문제를 분류하는 데 때때로 어려움을 겪고 있으므로 더 나은 결과를 얻기 위해 몇 가지를 함께 던졌습니다. 내가 취하는 단계는 무엇이 필요하지 않은지 확실하지 않지만 결국 작동합니다.

  1. ActiveRecord::Migration.maintain_test_schema!test_helper.rb 파일의 맨 위에 추가 하십시오.
  2. rake test:prepare
  3. rake db:migrate
  4. rake db:migrate RAILS_ENV=test

그런 다음 실행하면 bundle exec rake test보류중인 마이그레이션없이 매번 깨끗한 결과를 얻습니다. (이것이 처음 발판을 생성 한 직후에하는 일입니다). 이 단계 중 하나가 절대적으로 필요하지 않다는 것을 알고 있다면 누군가 나를 바로 잡으십시오. 그러나 이것이 매번 작동하는지 확인하는 방법입니다.


시도해 볼 수도 있습니다.

rake db:migrate RAILS_ENV=test

작동하는

db:test:prepare

않습니다 :)


chruby내 루비 버전을 관리하는 데 사용할 때이 문제가 있음을 발견했습니다 . Rails bin/rails db:test:prepare는 시스템 명령을 통해 호출합니다 . 이것은 chrubys $PATHenv var를 활용하지 않으므로 시스템 루비가 무엇이든 실행되며 일반적으로 보석이 누락되어 실패합니다. 불행히도 현재 이에 대한 좋은 해결책이 없습니다.


다음과 같이 변수 BEFORE 명령을 설정할 수 있습니다. 이 진술은 내 문제를 해결했습니다.

RAILS_ENV=test rake db:migrate

참조 URL : https://stackoverflow.com/questions/17150529/why-am-i-asked-to-run-rake-dbmigrate-rails-env-test

반응형