Зачем использовать db: схема: нагрузка
Я обнаружил, что мои собственные миграции в конечном итоге делают некоторую перестановку данных (например, я объединяю столбцы first_name и last_name в столбец full_name). Как только я это сделаю, я начну использовать ActiveRecord для просеивания записей базы данных, и ваши модели в конечном итоге сделают предположения относительно определенных столбцов. Например, моей таблице «Персона» позже был присвоен столбец «Позиция», по которому сортируются люди. При более ранних миграциях теперь не удается выбрать данные, поскольку столбец «позиция» еще не существует.
Как изменить поведение по умолчанию в Capistrano
В заключение, я считаю, deploy:cold
должен использовать db:schema:load
вместо db:migrate
. Я решил эту проблему, изменив средний шаг, который Capistrano выполняет при холодном развертывании. Для Capistrano v2.5.9 задача по умолчанию в коде библиотеки выглядит следующим образом.
namespace :deploy do
...
task :cold do
update
migrate # This step performs `rake db:migrate`.
start
end
...
end
Я перебил задачу в моем deploy.rb
следующим образом.
namespace :deploy do
task :cold do # Overriding the default deploy:cold
update
load_schema # My own step, replacing migrations.
start
end
task :load_schema, :roles => :app do
run "cd #{current_path}; rake db:schema:load"
end
end