рейк прерван! StandardError: Произошла ошибка, все последующие миграции отменены:

avatar
Sania Parween
8 апреля 2018 в 04:43
2105
2
0

sania@sania-Swift-SF314-52:~/library$ rake db:migrate

== 20180407084831 Книги: миграция ======================================== === -- create_table(:книги) рейк прерван! 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::Error: Таблица 'books' уже существует: CREATE TABLE books (id bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, title varchar(32) NOT NULL, <1551542291851>5,84 > int, description текст, created_at метка времени 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

Пожалуйста, помогите мне с решением. Я новичок в рельсах. Я также попытался сбросить базу данных, но грабли прерываются со следующей ошибкой

грабли прерваны! ActiveRecord::NoEnvironmentInSchemaError:

Данные среды не найдены в схеме. Чтобы решить эту проблему, запустите:

    bin/rails db:environment:set RAILS_ENV=development

Я не могу понять причину этого. Пожалуйста, помогите мне объяснить. Заранее спасибо

Источник

Ответы (2)

avatar
mmsilviu
8 апреля 2018 в 06:16
0

Откат последней миграции

rake db:rollback

Откат и миграции

rake db:rollback STEP=n

Подробнеездесь

Если вам не нужна последняя миграция и вы хотите удалить ее, вы можете используйте ответ @fool-dev

Sania Parween
8 апреля 2018 в 06:29
0

После того, как я откатил миграцию, нужно ли мне снова запускать команду для миграции - rake db:migrate?

Sania Parween
8 апреля 2018 в 06:31
0

После того, как я запустил свой localhost:3000, вот что я получаю: # Вызывает ошибку <tt>ActiveRecord::PendingMigrationError</tt>, если ожидается какая-либо миграция. def check_pending!(connection = Base.connection) поднять ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection) end def load_schema_if_pending!

mmsilviu
8 апреля 2018 в 13:38
0

Да, вам нужно снова запустить db migrate. rollback предназначен только для удаления некоторых миграций, которые уже были запущены. Таким образом, вы можете изменить файл миграции (в случае обновления/ошибки/изменений) и запустить миграцию базы данных, чтобы применить изменения.

avatar
fool-dev
8 апреля 2018 в 06:12
0

Если вам нужно выполнить миграцию вниз для определенного файла, запустите команду с таким номером версии

rake db:migrate:down VERSION=20180407084831 #=> or rails

Вы можете использовать команду rails d migration для уничтожения определенного файла миграции:

rails d migration MigrationName

Active Record Migrations

Обновление

Посмотрите, если ваш проект теперь является начальным шагом для обучения, удалите весь проект, затем попробуйте с нуля, например rails new project_name -d mysql, он сгенерирует проект с адаптером базы данных MySQL по умолчанию, затем cd имя_проекта, затем пакет exec rake db:migrate, он будет перенесен базу данных, если ваш database.yml в порядке, я имею в виду имя пользователя и пароль. Я думаю, это решит вашу проблему. Впервые это происходит, так что не расстраивайтесь, продолжайте двигаться. см. руководство Rails Official Guide и Learn Web Development with Rails - Michael Hartl это поможет многим новичкам

Sania Parween
8 апреля 2018 в 06:34
0

В моем случае мне нужно выполнить миграцию вниз или достаточно отката? Поскольку я новичок в этом, я действительно сбит с толку и не знаю полезности обоих.

fool-dev
8 апреля 2018 в 06:58
0

Вы можете удалить базу данных с помощью пакета exec rake db: drop и уничтожить все файлы миграции, сначала посмотрите, что вам нужно уничтожить последний файл миграции, который показывает ошибку, затем удалите БД и затем прочитайте руководства по рельсам, перенос активной записи и свежий перенести БД

Sania Parween
8 апреля 2018 в 07:51
0

1. Уничтожил последний файл миграции. 2. Сбросил базу данных с помощью пакета exec rake db:drop. ". Но снова я получаю ту же ошибку, что и в вопросе.

fool-dev
8 апреля 2018 в 08:16
0

Посмотрите, если ваш проект теперь является начальным шагом для обучения, удалите весь проект, затем попробуйте с нуля, например, шаг 2 rails new project_name -d mysql, он создаст проект с адаптером базы данных по умолчанию mysql, затем cd project_name, затем bundle exec rake db:migrate он перенесет базу данных, если ваш database.yml в порядке, я имею в виду username и password. Я думаю, это решит вашу проблему. Впервые это происходит, так что не расстраивайтесь, продолжайте двигаться. см. руководство guides.rubyonrails.org/getting_started.html и railstutorial.org/book, это поможет многим новичкам

fool-dev
8 апреля 2018 в 08:16
0

Дайте мне знать, если возникнут вопросы