schema.rb 文件未更新

Posted

技术标签:

【中文标题】schema.rb 文件未更新【英文标题】:schema.rb file is not updating 【发布时间】:2015-07-02 11:45:30 【问题描述】:

在我的应用中,我编辑了此处显示的迁移文件:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :first_name
      t.string :last_name
      t.string :dj_alias
      t.boolean :site_admin
      t.integer :station_id
      t.string :byline
      t.string :bio

      t.timestamps null: false
    end
  end
end

拥有 bio 和 byline 字段。但是,当我运行 rake db:reset 时,schema.rb 文件没有任何变化。我看到的唯一错误是这个代码块:

ActiveRecord::Base.connection.tables.each do |table|
  result = ActiveRecord::Base.connection.execute("SELECT id FROM #table ORDER BY id DESC LIMIT 1") rescue ( puts "Warning: not procesing table #table. Id is missing?" ; next )
  ai_val = result.any? ? result.first['id'].to_i + 1 : 1
  puts "Resetting auto increment ID for #table to #ai_val"

  ActiveRecord::Base.connection.execute("ALTER SEQUENCE #table_id_seq  RESTART WITH #ai_val")
end

位于seeds.rb 文件的底部,用于处理种子文件的索引。当我运行 rake db:reset 时,第一行中的救援语句显示:警告:未处理表 schema_migrations。身份证不见了?

我想我很困惑为什么这个声明正在拯救这个?虽然看起来可能是原因,但是schema.rb重置不是在访问seeds.rb文件之前发生的吗?

这是 rake db:migrate:status 的输出

 Status   Migration ID    Migration Name
--------------------------------------------------
up     20150225041954  Create songs
up     20150225042739  Create albums
up     20150225043102  Create artists
up     20150225043854  Create playlists
up     20150225044118  Create users
up     20150225044314  Create stations
up     20150225061259  Create featured artists
up     20150225153938  Add devise to users
up     20150225200646  Create reviews
up     20150321171830  Stations users
up     20150323200255  Add last fm to album
up     20150323200432  Add last fm to artist
up     20150323200513  Add last fm to song
up     20150325052314  Albums stations
up     20150325061241  Playlist songs
up     20150327172516  Add image url to albums
up     20150327172532  Add image url to artists

【问题讨论】:

【参考方案1】:

要在迁移文件中应用新的更改,您需要运行 rake db:migrate。如果在您进行更改之前已运行迁移,则运行 rake db:rollback 以回滚迁移并再次应用它。

rake db:reset 不会在迁移文件中应用新的更改。它会尝试加载 schema.rb 文件中已有的内容。

请参阅http://edgeguides.rubyonrails.org/active_record_migrations.html#setup-the-database 和http://edgeguides.rubyonrails.org/active_record_migrations.html#resetting-the-database,了解有关rake db:reset 工作原理的更多详细信息。

运行 rake db:migrate:status 以查看正在运行的迁移。

【讨论】:

我确实尝试过,是否可能需要多次运行 rake db:rollback? 我在 rake db:migrate:status 的输出中编辑到我原来​​的问题中 查看***.com/a/6635407/429758 了解如何回滚特定迁移。

以上是关于schema.rb 文件未更新的主要内容,如果未能解决你的问题,请参考以下文章

为两个数据库生成 schema.rb 文件

Rails 5:为啥即使我删除了迁移文件,rails 也会向 schema.rb 添加列

schema_migrations 表上未显示应用的迁移条目

Rails 迁移不会更改 schema.rb

Rails 架构未随迁移而更新

rake db:schema:dump 是不是从迁移或数据库本身重新创建 schema.rb?