Rails 6
environment: local development on Mac OS
DB server: MySQL
Я удалил все таблицы из БД, и единственные таблицы, оставленные в БД:
schema_migrations
ar_internal_metadata
Я убедился, что в schema_migrations нет данных, и изучил ar_internal_metadata, и эта таблица содержит одну строку со следующими значениями:
key: environment, value: development
У меня есть несколько миграций, последняя из которых - devise_create_users.rb.
Я пытаюсь запустить:
rake db:migrate
Но я получаю сообщение об ошибке:
=> rake db:migrate
== 20200317184535 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'users' already exists
/Users/dev/rails/myapp/db/migrate/20200317184535_devise_create_users.rb:5:in `change'
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'users' already exists
/Users/dev/rails/myapp/db/migrate/20200317184535_devise_create_users.rb:5:in `change'
Caused by:
Mysql2::Error: Table 'users' already exists
/Users/dev/rails/myapp/db/migrate/20200317184535_devise_create_users.rb:5:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Process finished with exit code 1
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :reset_password_token
t.datetime :reset_password_sent_at
t.datetime :remember_created_at
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
Когда я проверяю БД после этого, я все еще не вижу таблицу пользователей, а таблица schema_migrations по-прежнему опорожнить. Кроме того, миграция DeviseCreateUsers является самой последней, так почему она запускается первой.
Есть идеи?
Редактировать:
На основании комментария к вопросу, Я посмотрел на свой файл database.yml:
default: &default
host: localhost
database: <%= ENV['RAILS_DB_NAME'] %>
username: <%= ENV['RAILS_DB_USER'] %>
password: <%= ENV['RAILS_DB_PWD'] %>
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
socket: /tmp/mysql.sock
development:
<<: *default
Я сделал это изменение вчера вечером и забыл, что мои локальные настройки ENV были для другого проекта, поэтому Rails подбирал настройки для этого проекта и был действительно прав, в том, что таблица пользователей уже есть. Исправление было для меня, чтобы создать настройки проекта c ENV, для моей локальной среды разработки