2016-07-05 14 views
31

Sau khi nâng cấp một ứng dụng Rails để Rails 5, chạy kiểm tra RSpec mang lại cho tôi những lỗi sau:Rails 5, RSpec: dữ liệu Môi trường không tìm thấy trong lược đồ

rails aborted! 
ActiveRecord::NoEnvironmentInSchemaError: 

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

    bin/rails db:environment:set RAILS_ENV=test 

Tuy nhiên, đó bin không tồn tại và tôi có thể dường như không tạo ra nó với bundle binstubs rails hoặc với rake rails:update:bin.

Tôi cũng đã cố gắng:

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

Có một vấn đề có liên quan trên Github here.

Tôi làm cách nào để giải quyết lỗi này?

+0

chung: đây là một khủng khiếp, thay đổi theo chế, quá phức tạp.'env RAILS_ENV = {{bất cứ}} bin/rake db: di chuyển spec' được sử dụng để làm việc tốt – Barry

Trả lời

30

Rails mới 5 lệnh để tạo binstubs:

rails app:update:bin 

Cho phép tôi để chạy các giải pháp như lỗi đề nghị:

bin/rails db:environment:set RAILS_ENV=test 

Mẹo từ bình luận @max: Nếu bạn đang sử dụng database_cleaner và điều này lỗi tiếp tục xuất hiện sau đó thay đổi cấu hình của bạn thành:

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

Nếu bạn đang sử dụng' database_cleaner' và lỗi này tiếp tục xuất hiện sau đó thay đổi cấu hình của bạn thành 'DatabaseCleaner.clean_with: cắt ngắn, ngoại trừ: % w (ar_internal_metadata) '- https://github.com/DatabaseCleaner/database_cleaner/issues/445 – max

+0

omg, giải pháp db_cleaner hoạt động! : P không biết env đã được đặt trong bảng đó. – Frexuz

5

Đối với tôi , lỗi này được theo sau bởi một lỗi tương tự yêu cầu di chuyển.

này đã làm các trick: rails db:migrate RAILS_ENV=test

2

Đối với tôi, tôi đã phải làm một hỗn hợp của sự vật:

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

Điều này sẽ làm cho mọi việc làm việc, và sau đó tôi đã phải xem xét sự di cư của tôi, tôi đã thêm null: false vào mối quan hệ và đã thêm lỗi, quá trình di chuyển đã bị hủy và không hoàn thành

7

sửa cho jenkins trước khi bạn thả cơ sở dữ liệu, bạn nên thực hiện db:environment:set với || true. 'T hủy bỏ:

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

tôi phải thả cơ sở dữ liệu của tôi cho kiểm tra và tạo ra nó một lần nữa:

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

Sau đó cảnh báo bin/rails db:environment:set RAILS_ENV=test biến mất.

1

Tất cả các câu trả lời ở trên đều đúng, tuy nhiên, nếu bạn đang ở trong một dự án độc đáo hơn như phát triển động cơ ray với khái niệm lược đồ (hacky, tôi biết) và di chuyển của bạn không thành công vì lý do nào đó có thể chạy lại nó mà không cần kiểm tra mà ném ngoại lệ này. Ví dụ:

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

Các vấn đề liên quan