Зачем хранить копию приложения на хосте БД? - PullRequest
3 голосов
/ 21 июля 2009

Многие примеры рецептов Capistrano включают роль :db. По умолчанию задача развертывания экспортирует код приложения на все хосты во всех ролях. Это говорит о том, что люди обычно хранят копию своего приложения на хосте БД. Кроме того, в распространенном рецепте Capistrano deploy.rb, :deploy:migrate выглядит так:

task :migrate, :roles => :db, :only => { :primary => true } do
  # ...
end

Мой вопрос: почему это так? Разве не было бы лучше сохранить код приложения вне хоста БД (на котором может даже не быть установлен Ruby) и запускать миграции из рабочей коробки?

1 Ответ

7 голосов
/ 21 июля 2009

Сервер БД выполняет миграцию, поскольку он является «ответственным» за базы данных.

Можно также представить политики безопасности, которые позволяют создавать / удалять / изменять таблицы только с самого сервера базы данных.

Возможно даже небольшое повышение производительности, если во время миграции загружаются данные, хотя с самого начала это ужасная идея.

Если вам нужно сослаться на хост вашей базы данных и вам не нужна копия кода на нем, вы можете использовать что-то вроде этого:

role :db, 'dbhost', :no_release => true

Пример кода для запуска миграций на сервере приложений:

role :app, 'apphost', :runs_migrations => true
task :migrate, :roles = :app, :only => {:runs_migrations => true } do
  #...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...