Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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文件?_Ruby On Rails_Activerecord_Rake_Migrate - Fatal编程技术网

Ruby on rails RubyonRails-创建错误的Schema.rb文件?

Ruby on rails RubyonRails-创建错误的Schema.rb文件?,ruby-on-rails,activerecord,rake,migrate,Ruby On Rails,Activerecord,Rake,Migrate,我说db/schema.rb文件应该从rake db:migrate上的db/migrate文件中提取,对吗?我正在运行一个rakedb:migrate,它正在添加一个在migrate和模型中都没有定义的表。有什么想法吗 迁移文件(仅一个): 我之前添加了一个用户,但没有正确地添加,所以我销毁了它。不确定我在销毁部件时哪里出错了…如果数据库中没有任何重要数据,可以运行rake db:drop然后rake db:create。然后运行rakedb:migrate,它将更新您的模式 如果数据库中没有

我说db/schema.rb文件应该从rake db:migrate上的db/migrate文件中提取,对吗?我正在运行一个rakedb:migrate,它正在添加一个在migrate和模型中都没有定义的表。有什么想法吗

迁移文件(仅一个):


我之前添加了一个用户,但没有正确地添加,所以我销毁了它。不确定我在销毁部件时哪里出错了…

如果数据库中没有任何重要数据,可以运行
rake db:drop
然后
rake db:create
。然后运行
rakedb:migrate
,它将更新您的模式

如果数据库中没有任何重要数据,可以运行
rake db:drop
然后
rake db:create
。然后运行
rakedb:migrate
,它将更新您的模式

需要注意的是,
rake db:migrate
将轮询数据库的当前状态(单独的迁移),并相应地更新schema.rb。例如,如果您进入SQL命令行并添加一个表,然后运行
rake db:migrate
,无论是否有迁移,schema.rb都将反映新表。

需要注意的是
rake db:migrate
将轮询您的数据库的当前状态(独立于迁移),并相应地更新schema.rb。例如,如果进入SQL命令行并添加一个表,然后运行
rake db:migrate
,schema.rb将反映新表是否存在迁移。

可能是您忘记定义环境变量

  • 打开
    Gemfile
    并验证您没有在您的环境中使用
    sqlite
    gem
  • 键入
    rake db:drop
    然后键入
    rake db:drop
    命令,如果作为输出收到空字符串,则可能忘记设置环境变量
  • 签出
    config/database.yml
    文件并找到可以使用它们的地方。您应该可以找到这样的内容:
    数据库:
  • 确保您的变量已在之前设置。如果您使用
    dotenv
    figaro
    gems,可能您忘记了在那里创建适当的文件或定义变量

  • 可能是您忘记定义环境变量

  • 打开
    Gemfile
    并验证您没有在您的环境中使用
    sqlite
    gem
  • 键入
    rake db:drop
    然后键入
    rake db:drop
    命令,如果作为输出收到空字符串,则可能忘记设置环境变量
  • 签出
    config/database.yml
    文件并找到可以使用它们的地方。您应该可以找到这样的内容:
    数据库:
  • 确保您的变量已在之前设置。如果您使用
    dotenv
    figaro
    gems,可能您忘记了在那里创建适当的文件或定义变量

  • 你能展示一下你的模式和迁移文件吗?很抱歉。另外,我提到我之前确实创建了脚手架,但我破坏了它。它不会读取数据库,是吗?我使用的是SQLite,之前我发现有一个表存在错误,但它不允许我删除它。如果数据库中没有任何重要数据,可以运行
    rake db:drop
    然后
    rake db:create
    。然后运行
    rakedb:migrate
    ,它应该会干净地更新您的模式。这很有效!不太清楚为什么rake db:migrate读取数据库。。。难道它不应该只读取迁移文件吗?rake db:migrate不会读取数据库。如果您在模式文件上看到,它有一个版本。该版本与最新迁移的时间戳匹配。将不会读取早于架构版本的迁移来更新数据库。您能在那里显示架构和迁移文件吗?很抱歉。另外,我提到我之前确实创建了脚手架,但我破坏了它。它不会读取数据库,是吗?我使用的是SQLite,之前我发现有一个表存在错误,但它不允许我删除它。如果数据库中没有任何重要数据,可以运行
    rake db:drop
    然后
    rake db:create
    。然后运行
    rakedb:migrate
    ,它应该会干净地更新您的模式。这很有效!不太清楚为什么rake db:migrate读取数据库。。。难道它不应该只读取迁移文件吗?rake db:migrate不会读取数据库。如果您在模式文件上看到,它有一个版本。该版本与最新迁移的时间戳匹配。不会读取架构版本之前的迁移以更新数据库。
    class CreateUsers < ActiveRecord::Migration
      def change
        create_table :users do |t|
          t.string :email
          t.string :hashed_password
          t.timestamps
        end
      end
    end
    
    ActiveRecord::Schema.define(:version => 20121113214159) do
    
      create_table "user_categories", :force => true do |t|
        t.string   "title"
        t.string   "description"
    
        t.datetime "created_at",  :null => false
        t.datetime "updated_at",  :null => false
      end
    
      create_table "users", :force => true do |t|
        t.string   "email"
        t.string   "hashed_password"
    
        t.datetime "created_at",                  :null => false
        t.datetime "updated_at",                  :null => false
      end
    
    end