Rails 5,Rspec:在架构中找不到环境数据

ste*_*eel 52 rspec ruby-on-rails rspec-rails ruby-on-rails-5

将Rails应用程序升级到Rails 5后,运行RSpec测试会出现以下错误:

rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

Environment data not found in the schema. To resolve this issue, run: 

    bin/rails db:environment:set RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

但是,这bin不存在,我似乎无法使用bundle binstubs rails或生成它rake rails:update:bin.

我也尝试过:

rails db:environment:set RAILS_ENV=test
rake db:environment:set RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

有在Github上一个相关的问题在这里.

我该如何解决这个错误?

ste*_*eel 63

New Rails 5命令生成binstubs:

rails app:update:bin
Run Code Online (Sandbox Code Playgroud)

允许我按照建议的错误运行解决方案:

bin/rails db:environment:set RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

来自@max评论提示:如果您正在使用database_cleaner并且此错误不断弹出,请将您的配置更改为:

DatabaseCleaner.clean_with(
  :truncation,
  except: %w(ar_internal_metadata)
)
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用`database_cleaner`并且此错误不断弹出,则将您的配置更改为`DatabaseCleaner.clean_with:truncation,除了:%w(ar_internal_metadata)` - https://github.com/DatabaseCleaner/database_cleaner/issues/445 (32认同)
  • `database_cleaner> = 1.6.2`必须[有](https://github.com/DatabaseCleaner/database_cleaner/issues/445)[已修复](https://github.com/DatabaseCleaner/database_cleaner/pull/487)问题.请注意,如果您在服务器上运行CI测试,那么在那里构建的所有项目都应该具有`database_cleaner> = 1.6.2`. (2认同)

Mir*_*318 8

对我来说,这个错误之后是一个类似的请求迁移.

这样就可以了: rails db:migrate RAILS_ENV=test


Exs*_*emt 8

解决詹金斯你放下你应该执行数据库之前db:environment:set|| true,因此命令不会中止:

bin/rails db:environment:set RAILS_ENV=test || true
Run Code Online (Sandbox Code Playgroud)


小智 6

所有上述答案都是正确的,但是,如果您处于一个更独特的项目中,例如开发具有模式概念的rails引擎(hacky,我知道),并且由于某种原因您的迁移失败,您可以重新运行它没有抛出此异常的检查.例:

rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1


小智 5

对我来说,我必须做一些事情:

bin/rails db:environment:set RAILS_ENV=test
bin/rails db:migrate RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

这将使事情正常进行,然后我必须检查我的迁移,我在关系中添加了一个 null:false ,这增加了一个错误,迁移被取消并且没有完成