0

我是否正确地说 db/schema.rb 文件应该从 rake db:migrate 上的 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

我之前添加了一个 user_categories 脚手架,但不正确,所以我将其销毁。不知道我在破坏零件时哪里出错了......

4

3 回答 3

3

如果您的数据库中没有任何重要数据,则可以运行rake db:dropthen rake db:create。然后运行rake db:migrate,它应该更新您的架构干净。

于 2012-11-14T03:38:13.217 回答
2

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

于 2014-06-03T22:20:27.353 回答
0

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

  1. 打开Gemfile并验证您没有将sqlitegem 用于您的环境
  2. 如果作为输出收到空字符串,则键入rake db:dropthenrake db:drop命令,您可能忘记设置环境变量
  3. 签出config/database.yml文件并找到可以使用它们的地方。你应该找到类似的东西:database: <%= ENV["<DB_NAME"] %>
  4. 确保您的变量之前已设置。如果您使用dotenvor figarogems,可能您忘记在此处创建适当的文件或定义变量
于 2017-10-05T17:21:20.950 回答