Ruby on Rails — создание неправильного файла Schema.rb?

Правильно ли я говорю, что файл db/schema.rb должен извлекаться из файлов db/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

Ранее я добавил скаффолдинг user_categories, но неправильно, поэтому уничтожил его. Не знаю, где я ошибся, уничтожая детали...


person jake    schedule 14.11.2012    source источник
comment
Можете ли вы показать свою схему и ваши файлы миграции   -  person Leo Correa    schedule 14.11.2012
comment
Вот это - извините за это. Также упомянул, что на самом деле я создал леса раньше, но уничтожил их. Это не будет читать базу данных, не так ли? Я использую SQLite, и раньше я получал ошибки о существующей таблице, но это не позволяло мне ее удалить.   -  person jake    schedule 14.11.2012
comment
Если у вас нет важных данных в базе данных, вы можете запустить rake db:drop, а затем rake db:create. Затем запустите rake db:migrate, и он должен полностью обновить вашу схему.   -  person Leo Correa    schedule 14.11.2012
comment
Это сработало! Не совсем уверен, почему rake db:migrate читает базу данных... разве он не должен просто читать файлы миграции?   -  person jake    schedule 14.11.2012
comment
rake db:migrate не читает базу данных за скажем. Если вы видите в файле схемы, у него есть версия. Эта версия соответствует отметке времени последней миграции. Миграции, предшествующие вашей версии схемы, не будут считываться для обновления db.   -  person Leo Correa    schedule 14.11.2012


Ответы (3)


Если у вас нет важных данных в базе данных, вы можете запустить rake db:drop, а затем rake db:create. Затем запустите rake db:migrate, и он должен полностью обновить вашу схему.

person Leo Correa    schedule 14.11.2012

Важно отметить, что rake db:migrate будет опрашивать вашу базу данных на предмет ее текущего состояния (отдельно от миграций) и соответствующим образом обновлять schema.rb. Если вы войдете в командную строку SQL и добавите таблицу, например, а затем запустите rake db:migrate, schema.rb будет отражать эту новую таблицу независимо от того, есть ли миграция или нет.

person iamnotpretending    schedule 03.06.2014

Возможно, вы забыли определить переменные среды.

  1. Откройте Gemfile и убедитесь, что вы не используете гем sqlite для своей среды.
  2. Введите команды rake db:drop, затем rake db:drop, если на выходе вы получите пустую строку, возможно, вы забыли настроить переменные среды.
  3. Изучите файл config/database.yml и найдите места, где вы могли бы их использовать. Вы должны найти что-то вроде этого: database: <%= ENV["<DB_NAME"] %>
  4. Убедитесь, что ваши переменные были установлены ранее. Если вы используете гем dotenv или figaro, возможно, вы забыли создать соответствующий файл или определить там переменные.
person Purkhalo Alex    schedule 05.10.2017