একটি একক স্থানান্তর চালানোর কোন সহজ উপায় আছে? আমি একটি নির্দিষ্ট সংস্করণে স্থানান্তর করতে চাই না আমি কেবল একটি নির্দিষ্ট সংস্করণ চালাতে চাই।
একটি একক স্থানান্তর চালানোর কোন সহজ উপায় আছে? আমি একটি নির্দিষ্ট সংস্করণে স্থানান্তর করতে চাই না আমি কেবল একটি নির্দিষ্ট সংস্করণ চালাতে চাই।
উত্তর:
আপনি কেবল রুবি ফাইলের বাইরে কোড চালাতে পারবেন:
rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.up
দ্রষ্টব্য: রেলের নতুন সংস্করণগুলির AddFoos.new.upপরিবর্তে প্রয়োজন হতে পারে AddFoos.up।
একটি বিকল্প উপায় (আইআরবিবিহীন) যা শ্রেণীর নামের একটি অ্যারে প্রদান করে এমন প্রয়োজনের উপর নির্ভর করে:
script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
মনে রাখবেন আপনি এটি করেন তবে এটি সম্ভবত schema_migrationsটেবিলটি আপডেট করবে না , তবে মনে হচ্ছে আপনি যা চান তা তেমন।
AddFoos.new.up
require "./db/migrate/db/migrate/20090408054532_add_foos.rb"AddFoos.new.up
changeপরিবর্তে upএবং ব্যবহার করে তবে আপনার downচালানো দরকারAddFoos.new.migrate(:up)
AddFoos.new.change
রেলের মোটামুটি সাম্প্রতিক সংস্করণ ধরে নেওয়া আপনি সর্বদা চালাতে পারেন:
rake db:migrate:up VERSION=20090408054532
যেখানে সংস্করণ হ'ল মাইগ্রেশনের ফাইলনামে টাইমস্ট্যাম্প।
সম্পাদনা করুন: গত আট বছরে কোন এক সময় (আমি নিশ্চিত না যে কোনও সংস্করণ) রেলগুলি এমন চেক যুক্ত করেছে যা এটি ইতিমধ্যে চালানো থাকলে এটি চলতে বাধা দেয়। এটি schema_migrationsসারণীতে একটি এন্ট্রি দ্বারা নির্দেশিত হয় । এটি পুনরায় চালাতে, কেবল rake db:migrate:redo VERSION=20090408054532পরিবর্তে সম্পাদন করুন।
rake db:migrate:down VERSION=XXX
আপনি যদি কোনও নির্দিষ্ট মাইগ্রেশন চালাতে চান তবে করুন
$ rake db:migrate:up VERSION=20080906120000
আপনি যদি একাধিকবার মাইগ্রেশন চালাতে চান তবে করুন
# use the STEP parameter if you need to go more than one version back
$ rake db:migrate:redo STEP=3
আপনি যদি একাধিকবার একটি মাইগ্রেশন চালাতে চান তবে করুন
# this is super useful
$ rake db:migrate:redo VERSION=20080906120000
(আপনি নিজের স্থানান্তর ফাইলের নাম সংস্করণ নম্বর পেতে পারেন)
সম্পাদনা করুন: আপনি কেবল নিজের স্থানান্তর ফাইলেরও নাম পরিবর্তন করতে পারেন, যেমন:
20151013131830_my_migration.rb -> 20151013131831_my_migration.rb
তারপরে সাধারণত মাইগ্রেট করুন, এটি মাইগ্রেশনটিকে নতুন হিসাবে বিবেচনা করবে (আপনি যদি কোনও দূরবর্তী পরিবেশে স্থানান্তর করতে চান তবে ব্যবহারযোগ্য) (যেমন স্টেজিং) যার উপর আপনার নিয়ন্ত্রণ কম।
সম্পাদনা 2 : আপনি কেবল ডেটাবেসে মাইগ্রেশন এন্ট্রি কমাতে পারেন। উদাহরণ:
rails_c> q = "delete from schema_migrations where version = '20151013131830'"
rails_c> ActiveRecord::Base.connection.execute(q)
rake db:migrateএরপরে upন্যোকড মাইগ্রেশনগুলির পদ্ধতিটি পুনরায় চালু করা হবে ।
আপনি যদি changeএই জাতীয় পদ্ধতি প্রয়োগ করেন :
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
আপনি মাইগ্রেশনের একটি উদাহরণ তৈরি করতে পারেন এবং চালাতে পারেন migrate(:up)বা migrate(:down)উদাহরণস্বরূপ:
$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)
upএবং ব্যবহার করছেন এমনকি এটি প্রয়োগ হয় down।
এই মাইগ্রেশন ফাইলটি আবার চালানোর পদক্ষেপগুলি "20150927161307_create_users.rb"
কনসোলে সেই ফাইলটি থাকা ক্লাসটি অনুলিপি করুন এবং গত করুন।
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps null: false end
end
end
endশ্রেণীর উদাহরণ তৈরি করুন CreateUsers:c1 = CreateUsers.new
changeএই দৃষ্টান্তটির পদ্ধতিটি কার্যকর করুন:c1.changerequire "./db/migrate/20150927161307_create_users.rb"অনুলিপি এবং পেস্টের পরিবর্তে। তারপরে ক্লাসে সংজ্ঞায়িত পদ্ধতিটি ইনস্ট্যান্টিয়েট করে এবং কল করে আপনি একইভাবে ক্লাস চালাতে পারেন CreateUsers.new.change।
এর হিসাবে rails 5আপনার কাছে ব্যবহার করতে পারেন railsপরিবর্তেrake
রেল 3 - 4
# < rails-5.0
rake db:migrate:up VERSION=20160920130051
রেল 5
# >= rails-5.0
rake db:migrate:up VERSION=20160920130051
# or
rails db:migrate:up VERSION=20160920130051
rails db:migrate VERSION=20160920130051
আপনার যদি পাথের সমস্যা হয় তবে আপনি ব্যবহার করতে পারেন
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
দয়া করে লক্ষ্য করুন যে পরিবর্তে script/runner, আপনাকে rails runnerনতুন রেল পরিবেশে ব্যবহার করতে হতে পারে ।
আপনি যদি এটি কনসোল থেকে চালাতে চান তবে এটি যা আপনি খুঁজছেন তা:
$ rails console
irb(main)> require "#{Rails.root.to_s}/db/migrate/XXXXX_my_migration.rb"
irb(main)> AddFoo.migrate(:up)
আমি অন্যান্য উত্তরগুলি চেষ্টা করেছিলাম, তবে আমার জন্য কোনও প্রয়োজন নেই Rails.rootrequ
এছাড়াও, .migrate(:up)অংশটি মাইগ্রেশনটিকে ইতিমধ্যে চালানো হয়েছে কিনা তা নির্বিশেষে পুনরায় চালু করতে বাধ্য করে। আপনি ইতিমধ্যে যখন কোনও মাইগ্রেশন চালিয়েছেন, তখন এটি ডিবি-র সাথে জগাখিচুড়ি করে এটিকে পূর্বাবস্থায় ফিরিয়ে আনতে হবে এবং এটির পুনরায় সমাধানের জন্য দ্রুত সমাধান চাইলে এটি কার্যকর।
মনে হচ্ছে অন্তত সর্বশেষতম রিল রিলিজে (লেখার সময় 5.2) মাইগ্রেশন চালানো ফিল্টার করার আরও একটি উপায় আছে। যে কোনও একটি SCOPEপরিবেশের পরিবর্তনশীলে একটি ফিল্টার পাস করতে পারে যা মাইগ্রেশন ফাইলগুলি নির্বাচন করতে ব্যবহৃত হবে।
ধরে নিচ্ছি আপনার কাছে দুটি মাইগ্রেশন ফাইল রয়েছে 1_add_foos.rbএবং 2_add_foos.run_this_one.rbচলছে
SCOPE=run_this_one rails db:migrate:up
শুধুমাত্র নির্বাচন এবং চালানো হবে 2_add_foos.run_this_one.rb । মনে রাখবেন যে স্কোপের সাথে মেলে সমস্ত মাইগ্রেশন ফাইলগুলি রান করা হবে।