【问题标题】:new to rails, setting up db then running rake db:create/migrateRails 新手,设置 db 然后运行 ​​rake db:create/migrate
【发布时间】:2013-05-21 10:12:26
【问题描述】:

您好,我目前正在学习 Rails,并且正在学习教程。说明是在我创建应用程序后编辑迁移文件,然后运行 ​​rake db:migrate,然后运行 ​​rake db:create。

我已将迁移文件编辑为:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :username
      t.string :email
      t.string :encrypted_password
      t.string :salt
      t.timestamps
    end
  end
end

然后当我运行“rake db:migrate”时出现错误

Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` ...

在我应该运行“rake db:create”之后,我得到了这个

user_auth_development already exists
user_auth_test already exists

【问题讨论】:

  • 我需要运行 db:create 和 db:migrate 吗?还是在我编辑迁移文件后就已经设置好了?
  • 表示表已经存在。可能是以前的迁移已经创建了它。

标签: ruby-on-rails database migrate


【解决方案1】:

您运行rake db:create 一次且仅一次,并且您首先运行它。然后每次添加/更改迁移时运行rake db:migrate。您已经运行了此迁移,或者您指向的数据库已经存在并且已经包含名为users 的表。我的猜测是你已经运行了一次迁移,在这种情况下你可能很高兴。如果你想核对数据库并重新开始,请执行rake db:drop db:create db:migrate

【讨论】:

  • 非常感谢!我不知道为什么他们没有在指南中介绍这一点。它也没有解释你如何正确地更新迁移。当我更新迁移文件并运行 rake db:migrate 时,没有任何反应。我知道我做错了什么,但我不知道我应该做什么。我必须给迁移一个新名称吗?
  • 一般来说,您不应该修改迁移文件。如果你真的知道你在做什么,你就会知道什么时候可以接受。如有疑问,请勿修改;相反,创建一个新的迁移文件 (rails generate migration)。有一个小例外:如果要修改最近的迁移,可以这样做,然后运行 ​​rake db:migrate:redo,这将删除并重新运行上一次迁移。这并不总是可能的。这取决于最后一次迁移是可逆的(并非全部都是可逆的)。如果您已将其提交到共享存储库,则不应执行此操作。
  • 它什么也没做的原因是因为 Rails 会跟踪哪些迁移已经运行。它会创建一个名为 schema_migrations 的表,其中包含迁移时间戳列表(迁移名称的初始数字部分)。它不会重新运行已经记录在那里的一个。这就是它在您运行 rake db:migrate 时知道要应用哪些迁移的方式。
【解决方案2】:

我们可以简单地给出,它将完成数据库创建和迁移所需的所有 rake 任务

rake db:setup

【讨论】:

  • 一直在寻找那条简单的信息……看起来太琐碎了,不容易找到。它将根据模型生成数据库。
【解决方案3】:

对于 Rails 5 和 6,命令是:

rails setup

这将“创建数据库、加载架构并使用种子数据对其进行初始化”(docs)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2013-06-17
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多