【问题标题】:Ruby-on-Rails Tutorial TroubleRuby-on-Rails 教程问题
【发布时间】:2014-12-16 13:11:00
【问题描述】:

我是 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

【问题讨论】:

  • 您可以按照 Syed 的建议简单地重置您的数据库,而不是删除您的项目
  • 显示您的 CreateArticles 迁移文件
  • 问题可能出在您的数据库配置文件中
  • 我对 Rails 的工作原理知之甚少,不知道要寻找什么。有什么资源可以提供帮助吗?

标签: ruby-on-rails ruby rake dbmigrate


【解决方案1】:

您已经创建了那个特定的表。在您的终端上试试这个:

rake db:drop db:create db:migrate

或者:

rake db:reset db:migrate

所以基本上,您将从头开始您的数据库,这将避免当前的错误。

请注意,对于新的迁移,您只需运行“rake db:migrate”命令,否则您现有的数据将会丢失。

稍后,如果您在生产环境中遇到此问题,请确保您做“其他事情” - 您肯定不想牺牲您的生产数据库数据。

【讨论】:

  • 您可以简单地执行以下操作:rake db:drop db:create db:migraterake db:reset db:migrate。无需重新加载 rake 每个任务
  • 好的 +1 解决方案。您可能应该解释为什么这会对他有所帮助。因为它肯定不是生产环境的解决方案:)
  • @SyedHumzaShah 实际上 rake db:reset 就足够了。它自己做 db:migrate
  • @railsr,我认为 db:reset 会加载现有架构 - 它不会运行挂起的迁移。
  • @railsr,正确,检查stackoverflow.com/questions/10301794/…
【解决方案2】:

嗯,很明显,您已经有了表格文章,并且正在尝试创建一个新的。

两个选项:

  • 评论迁移文章确实 rake db:migrate,取消评论其他环境(如果有的话)
  • 清除数据库并再次运行迁移。

将 create_articles 也添加到您的问题中,可以帮助解决问题。

【讨论】:

    【解决方案3】:

    删除数据库

    rake db:drop
    

    然后再次迁移

    rake db:migrate
    

    您已经创建了文章表。因此,您需要删除它并再次迁移它。

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多