जवाबों:
rake db:migrate:redo VERSION=xxxxxxx
, लेकिन यह कदम down
और फिर चलेगा up
। आप अस्थायी रूप से डाउन स्टेप पर टिप्पणी करने के साथ ऐसा कर सकते हैं।
rake -T
।
db:test:prepare
भी उस सूची में दिखाई नहीं देता है। भगवान मुझे पार्टी के लिए देर हो रही है।
rake db:migrate:up VERSION=my_version
तो रेल्स कुछ भी नहीं कर सकते हैं , क्योंकि स्कीमा_मिग्रेशन टेबल अभी भी कहता है कि इसे चलाया गया है। उसी स्थिति में विफलrake db:migrate:redo VERSION=my_version
हो सकता है क्योंकि यह तालिका को नहीं गिरा सकता है। इस मामले में, बाहर टिप्पणी down
प्रवास अस्थायी रूप से विधि और फिर से रनrake db:migrate:redo...
rake db:migrate:up VERSION=1234567890
इसी तरह rake db:migrate:down
एक विशिष्ट प्रवास को नीचे ले जाने के लिए। आप उपलब्ध रेक कार्यों की सूची प्राप्त कर सकते हैं rake -T
।
VERSION
उल्लेख किया गया है कि आपकी प्रत्येक माइग्रेशन फ़ाइलों की शुरुआत में पूर्णांक मान होता है (जो कि इसे बनाते समय सिर्फ टाइमस्टैम्प था)। उदाहरण के लिए, VERSION=20150720023630
।
VERSION
यह सिर्फ एक पर्यावरण चर है, इसलिए यह कमांड में पहली बार आ सकता है या यहां तक कि कमांड में पिछले सेट कर सकता है:VERSION=1234567890 rake db:migrate:up
मुझे एक ही माइग्रेशन चलाना था जो बदल गया और अन्य सभी माइग्रेशन से स्वतंत्र रूप से फिर से चलाने की आवश्यकता थी। कंसोल फायर करें और ऐसा करें:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
अधिक उपयोगी यह एक रेक कार्य आदि में डाला जा सकता है।
change
, तो YourMigrations.migrate(:up)
इसके बजाय (या :down
भी!)
require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate VERSION=20098252345
कोशिश करो कि।
VERSION
सिर्फ एक पर्यावरण चर है, इसलिए यह कमांड में पहली बार आ सकता है या यहां तक कि कमांड में पिछले सेट कर सकता है:VERSION=20098252345 rake db:migrate
rake db:migrate:redo version='xxxx'
Xxxx के आसपास उद्धरण चिह्न लगाने के लिए याद रखें, xxxx आपके प्रवास के लिए टाइमस्टैम्प (या माइग्रेशन आईडी) है।
आपके द्वारा उपयोग किए गए पिछले माइग्रेशन के लिए आप टाइमस्टैम्प (माइग्रेशन आईडी) की जांच कर सकते हैं
rake db:migrate:status
ऊपर से कोर्च द्वारा जवाब पर विस्तार करना, require
मेरे लिए काम नहीं किया, लेकिन load
किया। माइग्रेशन फ़ाइल के लिए, ठोस होने के लिए:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
कंसोल टाइपिंग में
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
मेरे लिए काम किया।
> Race.new.min_quantity # => 0
यह माणिक 1.9.3p484 (2013-11-22 संशोधन 43786) [x86_64-linux] और रेल 3.2.13 के लिए था।
इसमें अपना 2 this जोड़ना क्योंकि मैं इसी मुद्दे में भाग गया:
यदि आप पूरी तरह से एक नया बनाने के बिना फिर से एक माइग्रेशन चलाना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
और रेल "भूल जाएगी" कि यह 20150105181157 के लिए माइग्रेशन चला। अब जब आप डीबी चलाते हैं: माइग्रेट करें इसे फिर से चलेगा।
यह लगभग हमेशा एक बुरा विचार है। एक उदाहरण जहां यह समझ में आ सकता है कि यदि आपके पास एक विकास शाखा है और आपने अभी तक अपना माइग्रेशन नहीं किया है और विकास में कुछ चीजों को जोड़ना चाहते हैं। लेकिन फिर भी अपने माइग्रेशन को 2-तरफ़ा करना बेहतर है ताकि आप बार-बार रोलबैक कर सकें और पुनः प्रयास कर सकें।
कंसोल के माध्यम से माइग्रेशन क्लास चलाने का एक तरीका मिल गया है। मैं माइग्रेशन कोड पहचानने योग्य नहीं हो सकता।
हालांकि, जैसा कि टिप्पणी से संकेत मिलता है, यह क्रम में माइग्रेशन चलाने के लिए पसंद किया जाता है। उपयोग:
rake db:migrate VERSION=##########
स्क्रिप्ट / कंसोल पर माइग्रेशन में अपना कोड कॉपी और पेस्ट करें?
मेरे पास एक उपयोगिता विधि है जो विकास में इसे बहुत आसान बनाती है। मुझे लगता है कि यह मुझे बहुत सारे माइग्रेशन बनाने से बचने में मदद करता है - आम तौर पर मैं माइग्रेशन को संशोधित करता हूं जब तक कि उन्हें तैनात नहीं किया गया हो।
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
मैं इस तकनीक का उपयोग विकास में करता हूं जब मैं एक प्रवासन को एक महत्वपूर्ण राशि बदलता हूं, और मैं एक टन नीचे माइग्रेट नहीं करना चाहता हूं और रास्ते में किसी भी डेटा को खो देता हूं (विशेषकर जब मैं विरासत डेटा आयात कर रहा हूं जो लंबे समय तक ले जाता है कि मैं फिर से आयात नहीं करना चाहता)।
यह 100% हैकिश है और मैं निश्चित रूप से उत्पादन में ऐसा करने की सिफारिश नहीं करूंगा, लेकिन यह चाल चलेगा:
STEP=n
तर्क जोड़ेंdb:migrate
(जहांn
चलाने के लिए पलायन की संख्या है, जैसे वहां के लिए हैdb:rollback
) - तो आप कर सकते हैंrake db:migrate STEP=1
याrake db:migrate STEP=2
आदि