schema.rb中没有生成迁移代码?

时间:2014-10-27 11:45:06

标签: ruby-on-rails

我必须将execute放入一个表迁移中。它看起来像这样:

class CreateFoos < ActiveRecord::Migration
  def up
    create_table :items do |t|
      t.integer :bar
    end

    execute("GRANT SELECT ON items TO otheruser;")
  end

  def down
    drop_table :items
  end
end

这很有效,但db/schema.rb文件(应该是数据库创建的权限)缺少execute命令行。

在生成schema.rb时,是否存在我缺少的内容或这是默认行为?

我可以在部署时忽略schema.rb并使用rake db:migrate生成表来绕过此问题,但我看到了避免这样做的建议。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Active Record的架构转储程序无法处理数据库特定的项目,如外键,约束,授权语句等。将数据库格式更改为sql而不是ruby。在您的application.rb文件中:

config.active_record.schema_format = :sql

这将使用特定于数据库的工具将架构转储到db/structure.sql。例如,如果您使用的是PostgreSQL,它将使用pg_dump转储模式。使用sql格式的缺点是转储不再是数据库不可知的。如果您要从PostgreSQL迁移到MySQL,您将无法使用生成的结构文件来创建新数据库。

您还可以使用rake命令生成sql转储:

rake db:structure:dump