2013-05-26 45 views
20

嗨im当前学习导轨,并遵循教程。说明是在创建应用程序后编辑迁移文件,然后运行rake db:migrate,然后使用rake db:create。新的导轨,设置数据库然后运行耙db:创建/迁移

我已经编辑迁移文件到这一点:

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 

然后当我运行“耙分贝:迁移”我得到一个错误

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

我应该后运行“耙分贝:创建”,然后即时得到这个

user_auth_development already exists 
user_auth_test already exists 
+0

我是否需要运行的db:创建和db:迁移?或者一旦我编辑了迁移文件,这是否可以安装? –

+0

这意味着表格已经存在。可能是以前的迁移已经创建它。 –

回答

43

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

+0

谢谢!这解决了它。 –

+0

非常感谢!我不知道他们为什么不在导游中介绍这一点。它也没有解释如何正确地更新迁移。当我更新迁移文件并运行'rake db:migrate'时,什么都不会发生。我知道我做错了什么,但我不知道该怎么做。我是否必须为迁移提供新名称或其他内容? – Nathan

+0

一般而言,您不应该修改迁移文件。如果你真的知道你在做什么,你会知道什么时候可以接受。如果您有任何疑问,请勿修改;相反,创建一个新的迁移文件('rails generate migration')。这里有一个小例外:如果你想修改最近的迁移,你可以这样做,然后运行'rake db:migrate:redo',这将删除并重新运行上一次迁移。这并不总是可能的;这取决于最后一次迁移是否可逆(并非全部都是)。如果您已将其提交给共享存储库,则不应该这样做。 –

15

我们可以简单地给予,它会做所有的rake任务,其需要的数据库创建和迁移

rake db:setup

+0

这对我来说不起作用......它表示模式文件还不存在...... –

+0

一直在寻找那么简单的信息......看起来很容易找到它。它将从模型生成数据库。 – nembleton