Использование rake db: перенести прямой, ванильный SQL

117
6

Какие бывают проблемы с использованием rake db:migrate для загрузки vanilla SQL?


Бизнес-требования, с которыми я работаю, не позволяют мне использовать миграции Rails по умолчанию. Но мне все равно нужно отслеживать изменения, легко изменять DDL базы данных и другие вещи, которые дают вам миграция Rails.


Итак, файл миграции будет выглядеть так:


class AddDateToPost < ActiveRecord::Migration
def self.up
ActiveRecord::Base.connection.execute("ALTER TABLE `posts` ADD COLUMN date DATETIME NULL")
end

def self.down
ActiveRecord::Base.connection.execute("ALTER TABLE `posts` DROP COLUMN date")
end
end

спросил(а) 2011-02-08T22:55:00+03:00 10 лет, 5 месяцев назад
1
Решение
189

Это совершенно приемлемо, и нет никаких штрихов, если вы уверены, что ваши функции вверх и вниз отражают друг друга. Я бы предложил сделать следующее для удобочитаемости:


class AddDateToPost < ActiveRecord::Migration
def self.up
execute "ALTER TABLE `posts` ADD COLUMN date DATETIME NULL"
end

def self.down
execute "ALTER TABLE `posts` DROP COLUMN date"
end
end

ответил(а) 2011-02-08T23:12:00+03:00 10 лет, 5 месяцев назад
45

Вы можете использовать методы миграции Rails в проекте без рельсов, используя standalone-migrations gem.


После установки драгоценного камня вы добавите следующие строки в Rakefile для включения задач rake db:*:


require 'standalone_migrations'
StandaloneMigrations::Tasks.load_tasks

После этого вы просто настраиваете свои миграции, как обычно:


class AddDateToPost < ActiveRecord::Migration
def self.up
add_columm :posts, :date, :datetime, default: nil
end

def self.down
remove_columm :posts, :date
end
end

ответил(а) 2014-05-19T18:03:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема