无法使用 Rails 3 迁移新模型
Can not migrate a new model using Rails 3
我正在尝试使用 rails 创建一个新的 table 3. 首先我将模型创建为 rails g model Vendor name:string address:string
。当输入 rake db:migrate` 它给了我以下错误。
Error: Mysql::Error: Table 'users' already exists
C:\Site\swargadwara_puri>rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql::Error: Table 'users' already exists: CREATE TABLE `users` (`id` int(11) D
EFAULT NULL auto_increment PRIMARY KEY, `contact_name` varchar(255), `login_id`
varchar(255), `password_hash` varchar(255), `password_salt` varchar(255), `phone
` varchar(255), `address` varchar(255), `created_at` datetime NOT NULL, `updated
_at` datetime NOT NULL) ENGINE=InnoDBC:/Site/swargadwara_puri/db/migrate/2015041
9131135_create_users.rb:3:in `change'
C:in `migrate'
20150419131135_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :contact_name
t.string :login_id
t.string :password_hash
t.string :password_salt
t.string :phone
t.string :address
t.timestamps
end
end
end
我之前在同一数据库中有一个名为 User 的 table。我也试过命令 rake db:migrate VERSION=201504......
仍然得到同样的错误。请帮助我解决此错误并成功创建新的 table。
我的解决方案很挑剔,但当我收到此错误时它会起作用,
注释掉你迁移def up
的内容。执行 rake db:migrate
然后 rake db:rollback
直至您评论的迁移版本。然后取消注释 def up
方法内容并执行 rake db:migrate
.
这种情况下的问题是您已经创建了 User
table 并且您的 20150419131135_create_users.rb
迁移文件尝试再次创建用户 table。所以我建议你在你的本地系统中备份这个文件。然后从您的 db/migration 目录中临时删除此文件。然后 运行
rake db:migrate
它将解决您的问题。
现在,正如您在聊天中所说,您没有 create_user 的任何其他迁移文件,我认为您可能丢失了之前在创建 User
[=46= 时创建的迁移文件] 或者你可以用不同的方式创建用户 table(不是 rake db:migrate
因为你的迁移目录中没有任何其他这样的文件)。
所以,请按照以下步骤操作:
- 从 MYSql 导出用户 table 的数据并将该文件保存在您的系统上。
- 从 MYSql
中删除用户 table
- 再次将临时删除的
20150419131135_create_users.rb
文件放入 db/migrate 目录
- 运行
rake db:migrate
这将创建您的 User
table
- 在用户 table 中导入在步骤 1 中导出的用户数据
这样您的迁移问题将永远得到解决,您甚至不会丢失 User
table.
的现有数据
您可以像
一样删除数据库并重新创建
rake db:drop && rake db:create && rake db:migrate
我正在尝试使用 rails 创建一个新的 table 3. 首先我将模型创建为 rails g model Vendor name:string address:string
。当输入 rake db:migrate` 它给了我以下错误。
Error: Mysql::Error: Table 'users' already exists
C:\Site\swargadwara_puri>rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql::Error: Table 'users' already exists: CREATE TABLE `users` (`id` int(11) D
EFAULT NULL auto_increment PRIMARY KEY, `contact_name` varchar(255), `login_id`
varchar(255), `password_hash` varchar(255), `password_salt` varchar(255), `phone
` varchar(255), `address` varchar(255), `created_at` datetime NOT NULL, `updated
_at` datetime NOT NULL) ENGINE=InnoDBC:/Site/swargadwara_puri/db/migrate/2015041
9131135_create_users.rb:3:in `change'
C:in `migrate'
20150419131135_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :contact_name
t.string :login_id
t.string :password_hash
t.string :password_salt
t.string :phone
t.string :address
t.timestamps
end
end
end
我之前在同一数据库中有一个名为 User 的 table。我也试过命令 rake db:migrate VERSION=201504......
仍然得到同样的错误。请帮助我解决此错误并成功创建新的 table。
我的解决方案很挑剔,但当我收到此错误时它会起作用,
注释掉你迁移def up
的内容。执行 rake db:migrate
然后 rake db:rollback
直至您评论的迁移版本。然后取消注释 def up
方法内容并执行 rake db:migrate
.
这种情况下的问题是您已经创建了 User
table 并且您的 20150419131135_create_users.rb
迁移文件尝试再次创建用户 table。所以我建议你在你的本地系统中备份这个文件。然后从您的 db/migration 目录中临时删除此文件。然后 运行
rake db:migrate
它将解决您的问题。
现在,正如您在聊天中所说,您没有 create_user 的任何其他迁移文件,我认为您可能丢失了之前在创建 User
[=46= 时创建的迁移文件] 或者你可以用不同的方式创建用户 table(不是 rake db:migrate
因为你的迁移目录中没有任何其他这样的文件)。
所以,请按照以下步骤操作:
- 从 MYSql 导出用户 table 的数据并将该文件保存在您的系统上。
- 从 MYSql 中删除用户 table
- 再次将临时删除的
20150419131135_create_users.rb
文件放入 db/migrate 目录 - 运行
rake db:migrate
这将创建您的User
table - 在用户 table 中导入在步骤 1 中导出的用户数据
这样您的迁移问题将永远得到解决,您甚至不会丢失 User
table.
您可以像
一样删除数据库并重新创建
rake db:drop && rake db:create && rake db:migrate