Ruby on rails RubyonRails。为什么schema.rb通过db:schema:dump在现有数据上构建几乎为空?
我正在尝试找到正确的(任意)方法,以便在Ruby on Rails中创建一个应用程序,该应用程序具有一个现有数据库(PostgreSQL),其中包含数据和由以下内容制作的新应用程序: rails new--database=postgresql-J--skip coffee。 我找到了一个数据库结构的文件:Ruby on rails RubyonRails。为什么schema.rb通过db:schema:dump在现有数据上构建几乎为空?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试找到正确的(任意)方法,以便在Ruby on Rails中创建一个应用程序,该应用程序具有一个现有数据库(PostgreSQL),其中包含数据和由以下内容制作的新应用程序: rails new--database=postgresql-J--skip coffee。 我找到了一个数据库结构的文件:schema.rb。我正在寻找一种自动完成的方法 在rake db:schema:dump文件schema.rb的结果中,生成的内容如下: ActiveRecord::Schema.defi
schema.rb
。我正在寻找一种自动完成的方法
在rake db:schema:dump
文件schema.rb
的结果中,生成的内容如下:
ActiveRecord::Schema.define(版本:0)do
启用扩展名“plpgsql”
结束
我被困在这里。为什么那个文件是空的?为什么这里没有桌子
我与DB有连接,没有错误。在测试之前,我做了rakedb:create
。成功创建数据库.yml
中描述的基
起初我使用Docker容器,这是我的目标。但是为了排除出错的可能性,我在系统(macOS Mojave)中安装了基于套接字的环境。我也得到了同样的效果
如何使用现有数据库的结构生成schema.rb
?或者是否有不同的方法基于现有数据结构构建RoR应用程序
更新:与新数据库的连接仅用于测试目的。验证配置 以下是我做的其他事情:
pg\u dump——仅模式应用程序开发>db/structure.sql
database.yml
中更改了名称,以便有新的导入位置rake db:setup
创建了新的dbrakedb:structure:load
从数据库中的db/structure.sql
文件正确创建表但是
rake db:schema:dump
仍然像前面一样生成空文件。如果您设置了正确的数据库配置,您可以使用rake db:migrate
重新生成架构文件
编辑:
好的,让我们检查一下我是否理解正确:
- 您有一个包含表和数据的现有数据库
- 你有全新的rails应用程序
- 您希望在
文件中反映db结构schema.rb
对吗?如果是,那么就像我以前写的那样-在不向代码库添加任何新迁移的情况下,运行
rakedb:migrate
。该任务不仅应用迁移文件中的更改,而且还更新模式文件,使其与实际数据库同步 听起来像是您做了rake db:create
为您创建了一个新数据库,然后做了rake db:schema:dump
为您从新创建的(空)数据库生成了一个schema.rb
文件
如果您有要使用的现有数据库,则需要修改数据库.yml
文件以连接到该数据库
如果你想创建一个新的数据库,你需要生成(例如)
rails生成迁移CreateProducts name:string part\u number:string
,然后运行它们rake db:migrate
,更新你的数据库并生成你的schema.rb
我知道了!我生命中的两天。
用于导入PostgreSQL数据库的文件开头有:
创建员工模式;
--后来
创建表employees.department;
我认为,由于Rails通过rake db:structure:load生成数据库,所以文件的语法是正确的
但是,当我在新的空数据库中手动创建表users
,然后pg_dump
这个新基时,我没有创建模式
查询
最后,rake db:schema:dump
用我想要的表填充schema.rb
:
create_表“users”,id::serial,force::cascade do | t|
t、 文本“名称”
结束
因为新的pg_dump
ed文件具有CREATE TABLE public.users
query公共
我认为关键在于database.yml
文件中的注释:
#架构搜索路径。服务器默认为$user,public
#模式搜索路径:myapp、sharedapp、public
一张图片比千言万语更有价值:右边的Tableusers
进入schema.rb
afterrake db:schema:dump
谢谢大家的评论。它确保了我不会犯可怕的错误。我想这不是办法。我没有填写任何迁移文件。我想用gem schema生成它们,但它希望在
schema.rb
中有表。请看我问题的更新。你理解得很好,但我认为我找到了那个有罪的人。顺便说一句,使用rakedb:migrate我也有同样的效果。你是对的,但我只是为了测试目的才连接了新数据库。验证配置。请查看我的问题的更新以了解一些细节。您的structure.sql中包含哪些内容?db/schema.rb无法表示数据库可能支持的所有内容,例如触发器、序列、存储过程、检查约束等