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

0

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

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

Теги:

2 ответа

0

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

rake db:rollback

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

rake db:rollback STEP=n

Больше информации здесь

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

  • 0
    После того, как я откатил миграцию, нужно ли мне снова запустить команду для миграции - rake db: migrate?
  • 0
    После того, как я запустил localhost: 3000, вот что я получаю: # Вызывает ошибку <tt> ActiveRecord :: PendingMigrationError </ tt>, если какие-либо миграции ожидают выполнения. def check_pending! (connection = Base.connection) вызывает ActiveRecord :: PendingMigrationError, если ActiveRecord :: Migrator.needs_migration? (соединение) заканчивается def load_schema_if_pending!
Показать ещё 1 комментарий
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 он сгенерирует проект с 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 это поможет многим новичкам

  • 0
    В моем случае мне нужно выполнить миграцию вниз или просто откат? Поскольку я новичок в этом, я действительно смущен и не знаю полезности того и другого.
  • 0
    Вы можете удалить базу данных, используя bundle exec rake db: удалить и уничтожить все файлы миграции, сначала посмотрите, что вам нужно уничтожить последний файл миграции, который показывает ошибку, затем удалите базу данных, а затем прочитайте руководство по активной миграции и обновите записи. перенести БД
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню