首页 / 知识
关于Ruby on Rails迁移:Ruby on Rails迁移-创建新的数据库架构
2023-04-17 01:45:00

Ruby on Rails Migration - Create New Database Schema我有一个运行SQL脚本的迁移,以创建新的Postgres模式。 默认情况下,在Postgres中创建新数据库时,它将创建一个名为" public"的架构,这是我们使用的主要架构。 迁移以创建新的数据库模式似乎运行良好,但是该问题在迁移运行后发生,当Rails尝试更新其依赖的'schema_info'表时,该表表明该表不存在,就好像它是 在新的数据库模式中查找它,而不是在表实际所在的默认"公共"模式中查找。 有人知道如何告诉Rails查看此表的"公共"模式吗? 正在执行的SQL示例:?
抛出错误:?
谢谢你的帮助 克里斯·奈特 好吧,这取决于您的迁移情况,database.yml情况以及您要尝试尝试的情况。无论如何,如果您需要并发布示例database.yml和迁移,则需要更多信息来更改名称。例如,迁移是否会更改适配器的search_path? 但是要知道,一般而言,Rails和Postgresql模式不能很好地协同工作(还好吗?)。 有几个地方有问题。尝试构建并使用仅使用一个pg数据库和2个非默认模式的应用程序,一个用于开发,另一个用于测试,并告诉我有关情况。 (根据以下内容,我已经可以告诉您您将被烧死) 也许自从我上次玩以来就已修复,但是当我看到http://rails.lighthouseapp.com/projects/8994/tickets/390-postgres-adapter-quotes-table-name-breaks-when-non-使用了default-schema-或此http://rails.lighthouseapp.com/projects/8994/tickets/918-postgresql-tables-not-generating-correct-schema-list或postgresql_adapter.rb中的此列表
(是的,如果您为开发和测试使用相同数据库且具有不同架构的数据库,那么这是错误的,每次运行单元测试时,这两个数据库都将被删除!) 我实际上开始写补丁。第一个是用于适配器中的索引方法的,它并不关心search_path在某些情况下最终以重复的索引结尾,然后我开始受到其余部分的伤害,并最终放弃了使用模式的想法:我想我的应用程序完成了,我没有多余的时间来解决使用模式时遇到的问题。 您可以使用pg_power。它不仅提供了用于迁移的其他DSL以创建PostgreSQL模式。 我不确定我确切地理解您的要求,但是,瑞克将期望将Rails架构的版本更新到schema_info表中。检查您的database.yml配置文件,这是rake想要查找要更新的表的地方。 您是否有可能正在迁移到新的Postgres模式,而rake仍然指向旧的模式?那时我不确定是否需要标准的Rails迁移。最好是创建自己的rake任务。 编辑:如果要引用两个不同的数据库或Postgres模式,Rails在标准迁移中不支持此功能。 Rails假定使用一个数据库,因此通常无法从一个数据库迁移到另一个数据库。当您运行" rake db:migrate"时,它实际上会查看RAILS_ENV环境变量以在database.yml中找到正确的条目。如果rake通过从database.yml查看"开发"环境和数据库配置开始迁移,则它将在迁移结束时更新到该环境。 因此,您可能需要在Rails堆栈外部执行此操作,因为您无法在Rails中同时引用两个数据库。尝试使用插件来允许此操作,但是它们主要是hacky,无法正常工作。 |
最新内容
相关内容
linux运行图形界命令?
linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,图形,linux图形化界面命令第一种方式比较简单,只需要选择相应的带图linux怎样运行命令?
linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux操作数据库命令?
linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参数,如何实现MySQL数据库的基本用法在linux下1、mysql all-databaselinux编译完运行命令?
linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,在linux中编译C输入完程序后输入个:wq然后按什么键就然后就回到了linux命令程序运行?
linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Linux中如何启动进程?进程调度命令有哪些?实现调度启动进程的方法有linux运行脚本命令?
linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Linux配置开机自启动执行脚本有哪些方法方法1:执行ntsysv命令,然后在linux命令后加运行?
linux命令后加运行?,状态,暂停,工具,单位,进程,环境,网络,系统,权威,第一,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是ssh运行linux命令?
ssh运行linux命令?,地址,服务,系统,软件,工具,电脑,网络,密码,名称,命令,在linux命令中登陆ssh服务的命令是?步骤如下:查询\安装SSH服务 (1)登陆linux脚本命令修改?
linux脚本命令修改?,密码,系统,文件,资料,工具,软件,基础,地址,标准,命令,linux中想在脚本中实现修改一个ip地址参数的配置文件,用sed命令如何linux命令行模式网络?
linux命令行模式网络?,网络,基础,系统,服务,管理,工作,命令,信息,中级,设备,linux重启网络服务命令是什么(linux网络重启的命令)1、输入 systelinux运行多个命令?
linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,linux多个用户同时执行命令会冲突吗不会冲突。解释:用户登录linux的linux数据库升级命令?
linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,linux下手动更新locate所在数据库的指令updatedb为什么行不通_百