Проблема с учебником по Ruby-on-Rails

Я новичок в Ruby и Rails. Так что это может быть легко исправить. Извините, если это так.

Недавно я установил Ruby-on-Rails и начал следовать учебному руководству на rubyonrails.org, в котором показано, как создать простой блог. Все работало нормально, пока я не попал в раздел 5.5. Я пошел, чтобы запустить db:migrate, и это дало мне ошибку.

|D:\Documents\Programs\Ruby\blog>rake db:migrate
== 20141216061542 CreateArticles: migrating ===================================
-- create_table(:articles)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "articles" already exists: CREATE TABLE "articles" ("id" INTEGER 
PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "text" text, "created_at" datetime,
 "updated_at"
 datetime) D:/Documents/Programs/Ruby/blog/db/migrate/20141216061542_create_articles.rb:3:in 
`change
'
C:in `migrate'
ActiveRecord::StatementInvalid: SQLite3::SQLException: table "articles" already exists: CREATE 
TABLE
 "articles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "text" text, 
"created_at" datetime, "updated_at" datetime)
D:/Documents/Programs/Ruby/blog/db/migrate/20141216061542_create_articles.rb:3:in `change'
C:in `migrate'
SQLite3::SQLException: table "articles" already exists
D:/Documents/Programs/Ruby/blog/db/migrate/20141216061542_create_articles.rb:3:in `change'
C:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Я запустил сервер, чтобы посмотреть, что он покажет, и он дал мне следующее:

ActiveRecord::PendingMigrationError
Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development

Он делал это с тех пор. Я попытался начать заново, удалив проект.(Не совсем уверен, что это был хороший шаг.) Я попытался просмотреть код. Ничто из того, что я пробовал, не подсказывало мне, что делать.

Есть ли способ избавиться от этих ошибок?

Заранее спасибо.


РЕДАКТИРОВАТЬ: Я попытался сбросить базу данных с помощью 'rake db:reset', но он просто дал мне это:

|D:\Documents\Programs\Ruby\blog\app\views\articles>rake db:reset
(in D:/Documents/Programs/Ruby/blog)
Permission denied @ unlink_internal - D:/Documents/Programs/Ruby/blog/db/development.sqlite3
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/fileutils.rb:1460:in `unlink'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/fileutils.rb:1460:in `block in remove_file'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/fileutils.rb:1468:in `platform_support'
...
rake aborted!
Errno::EACCES: Permission denied @ unlink_internal - 
 D:/Documents/Programs/Ruby/blog/db/development.
sqlite3

Tasks: TOP => db:schema:load
(See full trace by running task with --trace)

Я сократил его для удобства чтения.

И вот мой файл миграции create_articles:

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|

      t.timestamps
    end
  end
end

3 ответа

Решение

Вы уже создали эту конкретную таблицу. Попробуйте это с вашего терминала:

rake db:drop db:create db:migrate

Или же:

rake db:reset db:migrate

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

Обратите внимание, что для новых миграций вы только запускаете команду 'rake db:migrate', иначе ваши существующие данные будут потеряны.

Позже, если вы столкнетесь с этой проблемой в производственной среде, убедитесь, что вы делаете "что-то еще" - конечно, вы не захотите жертвовать данными своей производственной базы данных.

Брось БД

rake db:drop

И перенес это еще раз

rake db:migrate

Вы уже создали статьи статей. Так что вам нужно удалить его и перенести еще раз.

Ну, кажется очевидным, у вас уже есть настольные статьи, и вы пытаетесь создать новую.

Два варианта:

  • миграция комментариев со статьями: rake db: миграция, раскомментирование для другой среды (если есть)
  • очистите базу данных и снова запустите миграцию.

Добавьте create_articles к вашему вопросу, это может помочь решить проблему.

Другие вопросы по тегам