2016-07-05 58 views
31

发现环境中的数据升级Rails应用程序后到Rails 5,运行RSpec的测试给了我以下错误:导轨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 

然而,bin不存在,我可以似乎没有生成bundle binstubs railsrake rails:update:bin

我也曾尝试:

rails db:environment:set RAILS_ENV=test 
rake db:environment:set RAILS_ENV=test 

有Github上here一个相关的问题。

我怎样才能解决这个问题?

+0

一般:这是一个可怕的,过度设计,过度复杂的变化。'env RAILS_ENV = {{whatever}} bin/rake db:migrate spec'用于正常工作 – Barry

回答

30

新的Rails 5命令生成binstubs:

rails app:update:bin 

使我能够运行解决方案的错误提示:从@Max评论

bin/rails db:environment:set RAILS_ENV=test 

提示:如果您使用的是database_cleaner这错误不断弹出,然后将您的配置更改为:

DatabaseCleaner.clean_with(
    :truncation, 
    except: %w(ar_internal_metadata) 
) 
+24

如果您正在使用'database_cleaner'并且此错误不断弹出,请将您的配置更改为'DatabaseCleaner.clean_with:truncation,但以下情况除外: %w(ar_internal_metadata)' - https://github.com/DatabaseCleaner/database_cleaner/issues/445 – max

+0

omg,db_cleaner解决方案的工作原理! :P不知道env是在那张桌子上。 – Frexuz

5

对我来说,这个错误后跟一个类似的请求迁移。

这奏效了:rails db:migrate RAILS_ENV=test

2

对于我来说,我不得不做的事情的混合物:

bin/rails db:environment:set RAILS_ENV=test 
bin/rails db:migrate RAILS_ENV=test 

这将使工作上的事情,然后我不得不审查我的迁移,我是在关系中添加null:false并添加了一个bug,迁移被取消并且没有完成

7

修复jenkins在删除数据库之前应执行db:environment:set|| true,所以命令doesn “T中止:

bin/rails db:environment:set RAILS_ENV=test || true 
1

我不得不放弃我的数据库测试,并重新创建它:

  1. psql
  2. DROP DATABASE your_db_name_test;
  3. bundle exec rake db:create RAILS_ENV=test

之后警告bin/rails db:environment:set RAILS_ENV=test消失了。

1

以上所有答案都是正确的,但是,如果你在一个更独特的项目是如发展轨道引擎架构的概念(哈克,我知道),由于某种原因迁移失败,则可以在不引发此异常的检查的情况下重新运行它。例如:

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