sania @sania-Swift-SF314-52: ~/library $ rake db: migrate
== 20180407084831 Книги: мигрирующие =========================================== - create_table (: books) rake aborted! StandardError: произошла ошибка, все последующие миграции отменены:
Mysql2::Error: Table 'books' already exists: CREATE TABLE 'books' ('id' bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, 'title' varchar(32) NOT NULL, 'price' float, 'subject_id' int, 'description' text, 'created_at' timestamp NULL) ENGINE=InnoDB /home/sania/library/db/migrate/20180407084831_books.rb:4:in 'up'
Причина: ActiveRecord :: StatementInvalid: Mysql2 :: Ошибка: таблицы "книги" уже существуют: CREATE TABLE books
(id
bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, title
varchar (32) NOT NULL, price
float, subject_id
int, текст description
, created_at
timestamp NULL) ENGINE = InnoDB/home/sania/library/db/migrate/20180407084831_books.rb:4:in 'up'
Вызванный:
Mysql2::Error: Table 'books' already exists
/home/sania/library/db/migrate/20180407084831_books.rb:4:in 'up'
Tasks: TOP => db:migrate
(См. Полный след, выполнив задачу с помощью --trace).
Это содержимое файла 20180407084831_books.rb
class Books < ActiveRecord::Migration[5.1]
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end
def self.down
drop_table :books
end
end
Это содержимое файла 20180407072616_create_books.rb
class CreateBooks < ActiveRecord::Migration[5.1]
def change
create_table :books do |t|
t.timestamps
end
end
end
Пожалуйста, помогите мне с решением. Я новичок в рельсах. Я также попытался сбросить db, но грабли прерываются со следующей ошибкой
грабли прерваны! ActiveRecord :: NoEnvironmentInSchemaError:
Данные среды не найдены в схеме. Чтобы устранить эту проблему, запустите:
bin/rails db:environment:set RAILS_ENV=development
Я не могу понять причину этого. Пожалуйста, помогите мне объяснить. заранее спасибо
Откат последней миграции
rake db:rollback
Откат n миграций
rake db:rollback STEP=n
Больше информации здесь
Если вам не нужна последняя миграция, и вы хотите ее удалить, вы можете использовать ответ @fool-dev
Если вам нужно выполнить переход вниз для определенного файла, тогда вы запускаете команду с номером версии, подобным этому
rake db:migrate:down VERSION=20180407084831 #=> or rails
Вы можете использовать команду rails d migration
для уничтожения определенного файла миграции:
rails d migration MigrationName
Обновить
Посмотрите, если ваш проект теперь является начальным шагом для обучения, а затем удалите весь проект, а затем попробуйте с нуля, как rails new project_name -d mysql
он сгенерирует проект с rails new project_name -d mysql
адаптером базы данных MySQL, а затем cd project_name, затем свяжет exec rake db: migrate it will мигрировать базу данных, если ваш database.yml
в порядке, я имею в виду имя пользователя и пароль. Я думаю, это решит вашу проблему. Сперва это происходит, поэтому не мешайте продолжать двигаться. см. руководство Rails Official Guide
и Learn Web Development with Rails - Michael Hartl
это поможет многим новичкам