Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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
Ruby on rails RubyonRails。为什么schema.rb通过db:schema:dump在现有数据上构建几乎为空?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails RubyonRails。为什么schema.rb通过db:schema:dump在现有数据上构建几乎为空?

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

我正在尝试找到正确的(任意)方法,以便在Ruby on Rails中创建一个应用程序,该应用程序具有一个现有数据库(PostgreSQL),其中包含数据和由以下内容制作的新应用程序:

rails new--database=postgresql-J--skip coffee。 我找到了一个数据库结构的文件:
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
    创建了新的db
  • rakedb:structure:load
    从数据库中的
    db/structure.sql
    文件正确创建表

  • 但是
    rake db:schema:dump
    仍然像前面一样生成空文件。

    如果您设置了正确的数据库配置,您可以使用
    rake db:migrate
    重新生成架构文件

    编辑:

    好的,让我们检查一下我是否理解正确:

    • 您有一个包含表和数据的现有数据库
    • 你有全新的rails应用程序
    • 您希望在
      schema.rb
      文件中反映db结构

    对吗?如果是,那么就像我以前写的那样-在不向代码库添加任何新迁移的情况下,运行
    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
    
    一张图片比千言万语更有价值:右边的Table
    users
    进入
    schema.rb
    after
    rake db:schema:dump


    谢谢大家的评论。它确保了我不会犯可怕的错误。

    我想这不是办法。我没有填写任何迁移文件。我想用gem schema生成它们,但它希望在
    schema.rb
    中有表。请看我问题的更新。你理解得很好,但我认为我找到了那个有罪的人。顺便说一句,使用rakedb:migrate我也有同样的效果。你是对的,但我只是为了测试目的才连接了新数据库。验证配置。请查看我的问题的更新以了解一些细节。您的structure.sql中包含哪些内容?db/schema.rb无法表示数据库可能支持的所有内容,例如触发器、序列、存储过程、检查约束等