আমি আমার রেল অ্যাপ্লিকেশনটিতে পুরো গোছা থেকে মাত্র একটি স্থানান্তর চালানোর চেষ্টা করছি। কিভাবে আমি এটি করতে পারব? আমি এর আগে বা পরে কোনও মাইগ্রেশন চালাতে চাই না। ধন্যবাদ
উত্তর:
rake db:migrate:redo VERSION=xxxxxxx
, কিন্তু এটি চালাবে down
এবং তারপরে up
পদক্ষেপটি। আপনি সাময়িকভাবে ডাউন স্টেপ মন্তব্য করার সাথে একত্রে এটি করতে পারেন।
rake -T
।
db:test:prepare
এছাড়াও সেই তালিকাতে প্রদর্শিত হবে না। Godশ্বর আমি পার্টিতে দেরি করছি।
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
আরও কার্যকরভাবে এটি একটি রেক টাস্ক ইত্যাদিতে রাখা যেতে পারে etc.
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'
এক্সএক্সএক্সএক্সএক্সের চারপাশে উদ্ধৃতি চিহ্নটি রাখার কথা মনে রাখবেন, এক্সএক্সএক্সএক্সএক্স হ'ল আপনার মাইগ্রেশনের জন্য টাইমস্ট্যাম্প (বা মাইগ্রেশন আইডি)।
আপনি আগের মাইগ্রেশন ব্যবহার করে টাইমস্ট্যাম্পগুলি (মাইগ্রেশন আইডি) পরীক্ষা করতে পারেন
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
এটি রুবি ১.৯.৩.৪৪৪৪৮ (2013-11-22 রিভিশন 43786) [x86_64-লিনাক্স] এবং রেলগুলি 3.2.13 এর জন্য ছিল।
আমার 2 ¢ কে এতে যুক্ত করা হচ্ছে কারণ আমি এই একই সমস্যাটিতে চলেছি:
আপনি যদি কোনও নতুন তৈরি না করেই আবার পুরোপুরি মাইগ্রেশন চালাতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
এবং রেলগুলি "ভুলে যাবে" যে এটি 20150105181157 এর জন্য মাইগ্রেশনটি চালিয়েছিল Now এখন আপনি যখন ডিবি চালান: স্থানান্তর করুন এটি আবার এটি চালাবে।
যদিও এটি প্রায়শই একটি খারাপ ধারণা। এটি উদাহরণস্বরূপ যেখানে এটি বোধগম্য হতে পারে তা হ'ল যদি আপনার একটি বিকাশ শাখা থাকে এবং আপনি এখনও নিজের মাইগ্রেশন সরিয়ে না ফেলে থাকেন এবং বিকাশে এর সাথে কিছু জিনিস যুক্ত করতে চান। তবে তবুও আপনার মাইগ্রেশনটিকে দ্বি-উপায়ে করা আরও ভাল যাতে আপনি সঠিকভাবে রোলব্যাক করতে পারেন এবং বারবার পুনরায় চেষ্টা করতে পারেন।
কনসোল দিয়ে মাইগ্রেশন ক্লাস চালানোর উপায় আছে। আমি মাইগ্রেশন কোডটি সনাক্তযোগ্য হিসাবে পেয়ে যাব বলে মনে হচ্ছে না।
যাইহোক, মন্তব্যগুলি ইঙ্গিত হিসাবে, এটি স্থানান্তর ক্রম চালানো পছন্দ। ব্যবহার:
rake db:migrate VERSION=##########
স্ক্রিপ্ট / কনসোলে মাইগ্রেশনে আপনার কোড অনুলিপি করুন এবং আটকান?
আমার কাছে একটি ইউটিলিটি পদ্ধতি রয়েছে যা এটি বিকাশে খুব সহজ করে তোলে। আমি দেখতে পেয়েছি যে এটি আমাকে অনেক বেশি স্থানান্তর তৈরি এড়াতে সহায়তা করে - সাধারণত আমি স্থানান্তরগুলি অবধি সংশোধন করি না যতক্ষণ না তারা মোতায়েন করা হয়।
http://fullware.net/index.php/2011/05/26/easily-load-rails-migration- for-console-execution/
আমি যখন এই মাইগ্রেশনকে উল্লেখযোগ্য পরিমাণে পরিবর্তন করি তখন আমি এই কৌশলটি বিকাশে ব্যবহার করি এবং আমি এক টনও নীচে স্থানান্তর করতে চাই না এবং পথে বরাবর থাকা কোনও ডেটা হারাতে চাই না (বিশেষত যখন আমি উত্তরাধিকারের ডেটা আমদানি করতে দীর্ঘ সময় লাগে যে আমি আবার আমদানি করতে চাই না)।
এটি 100% হ্যাকিশ এবং আমি অবশ্যই উত্পাদনে এটি করার সুপারিশ করব না, তবে এটি কৌশলটি করবে:
STEP=n
যুক্তি যুক্ত করুনdb:migrate
(n
স্থানান্তর করার সংখ্যা যেখানে চলবে ঠিক তেমন যেমন রয়েছেdb:rollback
) - তারপরে আপনি করতে পারেনrake db:migrate STEP=1
বাrake db:migrate STEP=2
ইত্যাদিও করতে পারেন