首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移代码是否未在schema.rb中生成?

迁移代码是否未在schema.rb中生成?
EN

Stack Overflow用户
提问于 2014-10-27 19:45:06
回答 1查看 902关注 0票数 3

我不得不把execute放到一个表迁移中。它看起来是这样的:

代码语言:javascript
复制
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

这可以很好地工作,但是对于execute命令,db/schema.rb文件缺少这一行,它应该是创建数据库的权限。

是不是我遗漏了什么,或者这是生成schema.rb时的默认行为?

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-27 22:10:00

活动记录的架构转储程序无法处理特定于数据库的项,如外键、约束、授权语句等。请将数据库格式从ruby改为sql。在application.rb文件中:

代码语言:javascript
复制
config.active_record.schema_format = :sql

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

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

代码语言:javascript
复制
rake db:structure:dump
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26586852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档