মাত্র একটি স্থানান্তর রেক


95

আমি আমার রেল অ্যাপ্লিকেশনটিতে পুরো গোছা থেকে মাত্র একটি স্থানান্তর চালানোর চেষ্টা করছি। কিভাবে আমি এটি করতে পারব? আমি এর আগে বা পরে কোনও মাইগ্রেশন চালাতে চাই না। ধন্যবাদ


4
এটি একটি সুবিধাজনক রেল বৈশিষ্ট্য হবে: একটি STEP=nযুক্তি যুক্ত করুন db:migrate( nস্থানান্তর করার সংখ্যা যেখানে চলবে ঠিক তেমন যেমন রয়েছে db:rollback) - তারপরে আপনি করতে পারেন rake db:migrate STEP=1বা rake db:migrate STEP=2ইত্যাদিও করতে পারেন
user664833

উত্তর:


165

rake db:migrate:redo VERSION=xxxxxxx, কিন্তু এটি চালাবে downএবং তারপরে upপদক্ষেপটি। আপনি সাময়িকভাবে ডাউন স্টেপ মন্তব্য করার সাথে একত্রে এটি করতে পারেন।


হুঁ , ব্লগ.স্টোনান.com / 2007 / 12 / 18 / rake-dbmigrateredo , :: পুনরায় কোনও সংস্করণ যুক্তি বলে মনে হচ্ছে না।
টেরি জি লরবার

4
@ আপেরোলো: এটি পুরানো নয়। এই কাজের কোনও বিবরণ নেই এবং সুতরাং এটি প্রদর্শিত হবে না rake -T
রায়ান বিগ

4
@ আপেরোলো: db:test:prepareএছাড়াও সেই তালিকাতে প্রদর্শিত হবে না। Godশ্বর আমি পার্টিতে দেরি করছি।
ম্যারানক্রোকজ

9
রায়ান যা বলে তার উপর প্রসারিত করার জন্য, যদি টেবিলটি রেলের বাইরে ডাটাবেস থেকে ফেলে দেওয়া হয় তবে কিছুইrake db:migrate:up VERSION=my_version করতে পারে না , কারণ স্কিমা_মিগ্রেশন টেবিল এখনও বলে যে এটি চালানো হয়েছে। একই পরিস্থিতিতে ব্যর্থrake db:migrate:redo VERSION=my_version হতে পারে কারণ এটি টেবিলটি ফেলে দিতে পারে না। এই ক্ষেত্রে, downঅস্থায়ীভাবে মাইগ্রেশনে পদ্ধতিটি মন্তব্য করুন এবং পুনরায় রান করুনrake db:migrate:redo...
লিও

4
এবং @ লিও যা বলে তা প্রসারিত করার জন্য, যদি মাইগ্রেশনটি ডিএফ পরিবর্তনের সাথে সংজ্ঞায়িত হয় তবে উপরেরটি ছাড়াও এটি ডিফ সেল্ফ-আপে পরিবর্তন করুন।
ভাল

70
rake db:migrate:up VERSION=1234567890

একইভাবে rake db:migrate:downএকটি নির্দিষ্ট স্থানান্তর ডাউন নিতে। আপনি এর সাথে উপলভ্য রেক কার্যগুলির একটি তালিকা পেতে পারেন rake -T


4
এখানে VERSIONউল্লিখিতটি হ'ল আপনার প্রতিটি মাইগ্রেশন ফাইলের শুরুতে পূর্ণসংখ্যা মান (এটি কখন তৈরি হয়েছিল তার টাইমস্ট্যাম্প। উদাহরণস্বরূপ VERSION=20150720023630,।
অ্যারন-কোডিং

4
সংস্করণগুলি
রেক

লক্ষণীয়, VERSIONকেবল একটি পরিবেশের পরিবর্তনশীল তাই এটি কমান্ডের মধ্যে প্রথমে আসতে পারে বা কমান্ডের আগে সেটও করতে পারে:VERSION=1234567890 rake db:migrate:up
জোশুয়া পিন্টার

25

আমাকে একটি একক মাইগ্রেশন চালাতে হয়েছিল যা পরিবর্তিত হয়েছিল এবং অন্য সমস্ত স্থানান্তর থেকে স্বতন্ত্রভাবে আবার চালানো দরকার। কনসোল ফায়ার করুন এবং এটি করুন:

>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down

আরও কার্যকরভাবে এটি একটি রেক টাস্ক ইত্যাদিতে রাখা যেতে পারে etc.


6
এটি দুর্দান্তভাবে কাজ করেছে। ক্লাসটি সংজ্ঞায়িত করতে আপনি স্থানান্তর থেকে কনসোলটিতে কোডটি অনুলিপি-পেস্ট করতে পারেন (এবং এটি প্রয়োজনে ম্যানুয়াল ম্যানিপুলেশনকে মঞ্জুরি দেয়, উদাহরণস্বরূপ, আপনি যদি দেবকে ভুল করে থাকেন)। আপনার সাথে একটি উলটাকর মাইগ্রেশন সংজ্ঞায়িত তাহলে change, চালানোর YourMigrations.migrate(:up)পরিবর্তে (বা :down! খুব)
trisweb

4
আপনার হতে পারেrequire "#{Rails.root}/db/migrate/your_migrations.rb"
s2t2

16

rake db:migrate:up VERSION=version_no

নির্দিষ্ট মাইগ্রেশন স্ক্রিপ্ট স্থানান্তর (যুক্ত) করবে

rake db:migrate:down VERSION=version_no

নির্দিষ্ট মাইগ্রেশন স্ক্রিপ্ট মুছবে


11
rake db:migrate VERSION=20098252345

চেষ্টা করে দেখুন


8
আমি মনে করি এটি আপনার নির্দিষ্ট করা পর্যন্ত কোনও স্থানান্তর চালাবে।
কেন লিউ

4
বন্ধ, তবে এটি নির্দিষ্ট স্থানান্তরের আগে কোনও স্থানান্তর চালায় runs
আনন

6
আমি মনে করি না যে এর আগে এর আগে বিবেচনা না করে আপনার কেবল একটি মাইগ্রেশন চালানো উচিত / উচিত। একটি স্থানান্তর হ'ল ডেটাবেস কাঠামোর একটি প্রতিনিধিত্ব কারণ এটি একটি নির্দিষ্ট সময়ে কোডের সাথে সম্পর্কিত, এবং সুতরাং এটি প্রয়োজনীয় হওয়ার আগে মাইগ্রেশন। আপনি যদি কেবল একটি মাইগ্রেশন চালাতে চান তবে সম্ভবত মাইগ্রেশনগুলি কার্যক্ষম রাখতে আপনি যথাযথ আপ / ডাউন অপারেশনগুলি লিখেন নি ... কেবল আপনার আপ মাইগ্রেশনটি লেখার একটি খারাপ অভ্যাস।
জেপি সিলভাশি

4
লক্ষণীয়: VERSIONএটি কেবলমাত্র পরিবেশের পরিবর্তনশীল তাই এটি কমান্ডের মধ্যে প্রথমে আসতে পারে বা কমান্ডের আগে সেটও করতে পারে:VERSION=20098252345 rake db:migrate
জোশুয়া পিন্টার

4
rake db:migrate:redo version='xxxx'   

এক্সএক্সএক্সএক্সএক্সের চারপাশে উদ্ধৃতি চিহ্নটি রাখার কথা মনে রাখবেন, এক্সএক্সএক্সএক্সএক্স হ'ল আপনার মাইগ্রেশনের জন্য টাইমস্ট্যাম্প (বা মাইগ্রেশন আইডি)।

আপনি আগের মাইগ্রেশন ব্যবহার করে টাইমস্ট্যাম্পগুলি (মাইগ্রেশন আইডি) পরীক্ষা করতে পারেন

rake db:migrate:status    

3

উপরের কর্চ দ্বারা উত্তরটি প্রসারিত করা, 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

আমার 2 ¢ কে এতে যুক্ত করা হচ্ছে কারণ আমি এই একই সমস্যাটিতে চলেছি:

আপনি যদি কোনও নতুন তৈরি না করেই আবার পুরোপুরি মাইগ্রেশন চালাতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:

rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';

এবং রেলগুলি "ভুলে যাবে" যে এটি 20150105181157 এর জন্য মাইগ্রেশনটি চালিয়েছিল Now এখন আপনি যখন ডিবি চালান: স্থানান্তর করুন এটি আবার এটি চালাবে।

যদিও এটি প্রায়শই একটি খারাপ ধারণা। এটি উদাহরণস্বরূপ যেখানে এটি বোধগম্য হতে পারে তা হ'ল যদি আপনার একটি বিকাশ শাখা থাকে এবং আপনি এখনও নিজের মাইগ্রেশন সরিয়ে না ফেলে থাকেন এবং বিকাশে এর সাথে কিছু জিনিস যুক্ত করতে চান। তবে তবুও আপনার মাইগ্রেশনটিকে দ্বি-উপায়ে করা আরও ভাল যাতে আপনি সঠিকভাবে রোলব্যাক করতে পারেন এবং বারবার পুনরায় চেষ্টা করতে পারেন।


1

কনসোল দিয়ে মাইগ্রেশন ক্লাস চালানোর উপায় আছে। আমি মাইগ্রেশন কোডটি সনাক্তযোগ্য হিসাবে পেয়ে যাব বলে মনে হচ্ছে না।

যাইহোক, মন্তব্যগুলি ইঙ্গিত হিসাবে, এটি স্থানান্তর ক্রম চালানো পছন্দ। ব্যবহার:

rake db:migrate VERSION=##########

স্ক্রিপ্ট / কনসোলে মাইগ্রেশনে আপনার কোড অনুলিপি করুন এবং আটকান?


1

আমার কাছে একটি ইউটিলিটি পদ্ধতি রয়েছে যা এটি বিকাশে খুব সহজ করে তোলে। আমি দেখতে পেয়েছি যে এটি আমাকে অনেক বেশি স্থানান্তর তৈরি এড়াতে সহায়তা করে - সাধারণত আমি স্থানান্তরগুলি অবধি সংশোধন করি না যতক্ষণ না তারা মোতায়েন করা হয়।

http://fullware.net/index.php/2011/05/26/easily-load-rails-migration- for-console-execution/


0

আমি যখন এই মাইগ্রেশনকে উল্লেখযোগ্য পরিমাণে পরিবর্তন করি তখন আমি এই কৌশলটি বিকাশে ব্যবহার করি এবং আমি এক টনও নীচে স্থানান্তর করতে চাই না এবং পথে বরাবর থাকা কোনও ডেটা হারাতে চাই না (বিশেষত যখন আমি উত্তরাধিকারের ডেটা আমদানি করতে দীর্ঘ সময় লাগে যে আমি আবার আমদানি করতে চাই না)।

এটি 100% হ্যাকিশ এবং আমি অবশ্যই উত্পাদনে এটি করার সুপারিশ করব না, তবে এটি কৌশলটি করবে:

  1. মাইগ্রেশনকে সরান যা আপনি এটির ডিরেক্টরি থেকে আবার অস্থায়ী জায়গায় চলে যেতে চান
  2. একই নামের সাথে অন্য একটি স্থানান্তর তৈরি করুন
  3. নতুন উত্পন্ন স্থানান্তর ফাইলটিতে আসল মাইগ্রেশন কোডটি অনুলিপি / আটকান
  4. নতুন মাইগ্রেশন চালান
  5. সদ্য উত্পন্ন স্থানান্তর ফাইল মুছুন
  6. সাম্প্রতিকতম মানটি সরাতে আপনার স্কিমা মাইগ্রেশন সম্পাদনা করুন
  7. পুরানো মাইগ্রেশন ফাইলটি পুনরুদ্ধার করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.