【问题标题】:rake db:migrate invalid schema error for role that owns the schemarake db:migrate 拥有架构的角色的无效架构错误
【发布时间】:2016-12-28 01:47:51
【问题描述】:

在我的database.yml

  default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5  
  timeout: 5000
  database: postgres
  username: website

development:
  <<: *default
  host: localhost
  password: password
  schema_search_path: "website_dev"

在 postgres 数据库中以管理员用户身份运行

ubuntu=# CREATE USER website WITH PASSWORD 'password';
CREATE ROLE
ubuntu=# CREATE SCHEMA website_dev AUTHORIZATION website;
CREATE SCHEMA
ubuntu=# CREATE SCHEMA website_test AUTHORIZATION website;                                                                               
CREATE SCHEMA

这应该意味着用户/角色网站可以在模式 website_dev 和 website_test 中创建表,但是 rake db:migrate 任务失败并出现错误

ActiveRecord::StatementInvalid: PG::InvalidSchemaName: ERROR:  no schema has been selected to create in
: CREATE TABLE "schema_migrations" ("version" character varying PRIMARY KEY)

【问题讨论】:

  • 嗨,您找到答案了吗?我遇到了同样的错误
  • 是的,我在 cloud9.io 中遇到了这个问题,因为它们对 postgres 有一组不同的默认值。我已经相应地更新了我的数据库 yml 以指向正确的数据库和用户。那个临时空间现在已经被删除了,所以很遗憾我不能分享 ~/.profile 文件

标签: ruby-on-rails postgresql ubuntu


【解决方案1】:

听起来 Pgsql SEARCH_PATH 在第一次迁移之前没有初始化,即使它是在 database.yml 中定义的。

根据我自己的经验,这是我建议的解决方案:

1- 创建一个 rake 任务 用于初始化数据库,从而创建架构

2- 运行创建 schema_migrations 表的第一个迁移

文件 lib/tasks/db.rake

namespace :db do
    desc 'Create database schemas before going for the first migration'
    task init: ['db:drop','db:create'] do
    ActiveRecord::Base.connection.execute("CREATE SCHEMA website_dev AUTHORIZATION website")
    ActiveRecord::Base.connection.execute("CREATE SCHEMA website_test AUTHORIZATION website")
    puts 'Database initialised'
    end
  end

运行rake db:init 将执行任务 db:drop、db:create,然后是块内的指令。在此之后运行 rake db:migrate 会在 database.yml 文件中相应环境的 schema_search_path: "website_dev" 指令中列出的第一个架构上执行迁移。

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多