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

时间:2012-11-14 02:41:42

标签: ruby-on-rails activerecord rake migrate

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

迁移文件(只有一个):

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email
      t.string :hashed_password
      t.timestamps
    end
  end
end

rake后产生的架构:

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脚手架,但不正确所以我将其销毁。不知道我在哪里破坏了零件......

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

可能是你忘了定义环境变量。

  1. 打开Gemfile并确认您没有将sqlite gem用于您的环境
  2. 键入rake db:drop然后rake db:drop命令,如果输出您收到空字符串可能您忘记设置环境变量
  3. 查看config/database.yml文件,找到可以使用它们的位置。您应该找到类似的内容:database: <%= ENV["<DB_NAME"] %>
  4. 确保之前已设置变量。如果您使用dotenvfigaro宝石,可能您忘记创建适当的文件或定义变量