2016-07-05 14 views
31

में नहीं मिला एक रेल एप्लिकेशन अपग्रेड करने के बाद, RSpec परीक्षण चलाने मुझे निम्न त्रुटि देता है:रेल 5, Rspec: पर्यावरण डेटा रेल के लिए 5 स्कीमा

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 rails या rake rails:update:bin के साथ उत्पन्न करना प्रतीत होता है।

मैं भी कोशिश की है:

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

Github here पर कोई संबंधित समस्या नहीं है।

मैं इस त्रुटि को कैसे संबोधित कर सकता हूं?

+0

आम तौर पर: यह एक भयानक, पर इंजीनियर, अति जटिल परिवर्तन है।'env RAILS_ENV = {{whatever}} बिन/रेक डीबी: माइग्रेट स्पेक 'ठीक काम करने के लिए प्रयुक्त होता है – Barry

उत्तर

30

नई रेल 5 आदेश binstubs उत्पन्न करने के लिए: @max टिप्पणी से

bin/rails db:environment:set RAILS_ENV=test 

युक्ति::

rails app:update:bin 

मुझे सुझाव दिया त्रुटि के रूप में समाधान को चलाने के लिए अनुमति देता है आप database_cleaner उपयोग कर रहे हैं और इस त्रुटि पॉप-अप रहती है और फिर अपनी कॉन्फ़िगरेशन को बदलें:

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

यदि आप' डेटाबेस_कलैनर 'का उपयोग कर रहे हैं और यह त्रुटि पॉप-अप रहती है तो अपनी कॉन्फ़िगरेशन को' DatabaseCleaner.clean_with 'में बदलें: ट्रांकेक्शन, सिवाय इसके कि: % w (ar_internal_metadata) '- https://github.com/DatabaseCleaner/database_cleaner/issues/445 – max

+0

omg, db_cleaner समाधान काम करता है! : पी नहीं जानता था कि उस तालिका में 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 

यह चीजें काम करना होगा, और फिर मैं अपने माइग्रेशन की समीक्षा करने के लिए किया था, मैं था एक अशक्त जोड़ने: एक रिश्ते में झूठी और कहा कि एक बग जोड़ा, प्रवास रद्द कर दिया गया और इससे पहले कि आप डेटाबेस ड्रॉप आप || true साथ db:environment:set पर अमल करना चाहिए समाप्त नहीं किया जेनकींस के लिए

7

ठीक है, तो आदेश नहीं करता है 'टी गर्भपात:

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

संबंधित मुद्दे