首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rake db:为拥有架构的角色迁移无效架构错误

rake db:为拥有架构的角色迁移无效架构错误
EN

Stack Overflow用户
提问于 2016-08-21 11:39:56
回答 1查看 1.1K关注 0票数 0

在我的database.yml

代码语言:javascript
复制
  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数据库中,我以管理员用户身份运行

代码语言:javascript
复制
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 :migrate任务由于错误而失败。

代码语言:javascript
复制
ActiveRecord::StatementInvalid: PG::InvalidSchemaName: ERROR:  no schema has been selected to create in
: CREATE TABLE "schema_migrations" ("version" character varying PRIMARY KEY)
EN

回答 1

Stack Overflow用户

发布于 2016-12-08 21:38:24

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

以下是我根据自己的经验提出的解决办法:

1-创建用于初始化数据库的rake任务,这将创建模式。

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

文件库/任务/db.rake

代码语言:javascript
复制
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之后,在schema_search_path:"website_dev"指令中列出的第一个模式上执行database.yml文件中相应环境的迁移。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39063777

复制
相关文章

相似问题

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