Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql rake db:migrate-PG::InvalidSchamaName错误:未选择要在中创建的架构_Postgresql_Ruby On Rails 4 - Fatal编程技术网

Postgresql rake db:migrate-PG::InvalidSchamaName错误:未选择要在中创建的架构

Postgresql rake db:migrate-PG::InvalidSchamaName错误:未选择要在中创建的架构,postgresql,ruby-on-rails-4,Postgresql,Ruby On Rails 4,我正在尝试为我的rails应用程序在postgres数据库上运行rake:db迁移。rake:db drop(db已经存在,我正在修复一个需要重新创建db的bug)运行良好rake:db create运行良好,但是当我运行rake:db migrate时,我得到以下错误 错误--:PG::InvalidSchemaName:错误:未选择要在中创建的架构 我的database.yml文件看起来很好(它正在工作,所以我不确定发生了什么?) 你知道发生了什么吗?Rails不会自动创建模式,如果你坚持公

我正在尝试为我的rails应用程序在postgres数据库上运行rake:db迁移。rake:db drop(db已经存在,我正在修复一个需要重新创建db的bug)运行良好rake:db create运行良好,但是当我运行rake:db migrate时,我得到以下错误

错误--:PG::InvalidSchemaName:错误:未选择要在中创建的架构

我的database.yml文件看起来很好(它正在工作,所以我不确定发生了什么?)


你知道发生了什么吗?

Rails不会自动创建模式,如果你坚持公共模式,那么这个事实可以被忽略,一切正常

要使用不同的模式,您必须包括迁移,这样的原始SQL模式可以:

class CreateMyAppSchema < ActiveRecord::Migration
  def up
    execute "CREATE SCHEMA myapp_dev;" 
  end

  def down
    execute "DROP SCHEMA myapp_dev;" 
  end
end

由于某些原因,我的数据库中没有“myapp_-dev”模式,当我使用PGAdmin工具创建它时,它解决了这个问题。

或者,这个问题的最后一个答案与您的情况有关(),如果有人知道rails为什么不创建“myapp_-dev”数据库中的模式,但这会很有帮助。我已经编辑了我的答案,包括在迁移中创建模式。我坚持公共模式没有问题,那么我将如何在模式myapp_dev上向用户授予使用权(假设用户是DB所有者?)对不起,我对postgres来说是个新手。在Rails中,我必须为此创建迁移吗?如果我有一个_dev,_testand prod,我该怎么做呢?如果你坚持公共模式,你只需保持原样,不需要授予使用权,并可能删除“模式搜索路径”。默认情况下,任何SQL都将引用public。如果您有不同的环境,您可以检查环境字符串以确定模式的名称,但是如果每个环境有不同的数据库,您可以将它们命名为相同的模式。因此,我删除了my database.yml中的模式搜索路径(我有一个开发、测试和产品,所以我可以,这似乎已经解决了问题。我想我在某些事情上遇到了问题,因为我读到了一个不同的S/O,它说它是必需的。我想我可能有一个我正在使用的DB,需要它,但自从我为它建立了自己的DB之后就再也没有了。问题解决了,你得到了第次投票。)谢谢你。
class CreateMyAppSchema < ActiveRecord::Migration
  def up
    execute "CREATE SCHEMA myapp_dev;" 
  end

  def down
    execute "DROP SCHEMA myapp_dev;" 
  end
end
GRANT USAGE on schema myapp_dev to the_user;