我有一个Rails应用程序,我想我应该使用db:schema:load来创建MySQL数据库,因为这是推荐的.我的问题是,我正在使用Capstrano进行部署,似乎默认使用rake db:Migrate.有什么方法可以改变这一点吗?或者Capstrano使用db:Migrate是有充分理由的吗?

推荐答案

为什么使用db:schema:load

我发现我自己的迁移最终会对数据进行一些洗牌(例如,假设我将first_name和last_name列组合成一个full_name列).一旦我做了这些,我就开始使用ActiveRecord来筛选数据库记录,您的模型最终会对某些列做出假设.例如,我的"Person"表后来被赋予了一个"position"列,根据该列对人进行排序.以前的迁移现在无法 Select 数据,因为"位置"列还不存在.

如何更改Capstrano中的默认行为

总而言之,我相信deploy:cold should使用db:schema:load而不是db:migrate.我通过更改Capstrano在冷部署上执行的中间步骤解决了这个问题.对于Capstrano 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

Database相关问答推荐

Mongo DB使用一对多关系离开JOIN

有关托管默认 SQL Server 实例的 Azure VM 数据库服务器的问题

使用 noSQL 和 MongoDB 在数据库中存储任何类型文件的最佳方法是什么

Mongodb聚合$group,限制数组长度

术语 SSTable 和 LSM Tree 有什么区别

如何使用存储在数据库表中的属性配置 Spring bean

发布 Oracle 和 SQL Server 性能测试是否违反许可?

在 model.save() 中处理竞争条件

什么技术对处理数百万条记录最有效?

MongoDB是面向对象的吗?

使用 LiquiBase 和 Spring 将大量值(使用 FK)插入数据库

在 MS SQL 中使用 GUID 作为主键是不是一个坏主意?

本地数据库,我需要一些例子

如何使用 SQL 命令文件创建 SQLite3 数据库文件?

使用 PDO 获取单行单列

在数据库中存储年份

为 PHPMyadmin DB 自动生成数据库图?

使用 Django 的复合/复合主/唯一键

以可能的数据丢失为代价提高 PostgreSQL 写入速度?

xampp phpmyadmin,格式参数不正确