我必须将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
生成表来绕过此问题,但我看到了避免这样做的建议。
有什么想法吗?
答案 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