mysql - 数据库 :schema:load vs db:migrate with capistrano

标签 mysql ruby-on-rails database rake capistrano

我有一个 Rails 应用程序,我正在移动到另一台服务器,我想我应该使用 db:schema:load 来创建 mysql 数据库,因为它是推荐的。我的问题是我正在使用 capistrano 进行部署,它似乎默认为 rake db:migrate。有没有办法改变这个或者 capistrano 使用 db:migrate 有充分的理由?

最佳答案

为什么要使用 db:schema:load

我发现我自己的迁移最终会对数据进行一些混洗(例如,假设我将 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

关于mysql - 数据库 :schema:load vs db:migrate with capistrano,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329778/

相关文章:

database - Codeigniter,事务中的错误跟踪

php - MySQL 连接数组

MySQL:如何计算按day_hour分组的分钟行

MySQL 与 DB2 RDBMS

ruby-on-rails - ElasticSearch-传递术语数组进行过滤

html - 使用 actionmailer 时如何根据设备类型或屏幕大小调整图像大小?

ruby-on-rails - Encoding::UndefinedConversionError ("\xE2"从 ASCII-8BIT 到 UTF-8):基于 ROR + MongoDB 的应用程序中的错误

php - Moodle 表单显示错误值

mysql - mysql 是否可以在一个查询中执行多个解释?

database - DB2 中是否应该避免左外连接