【问题标题】:rails "rake db:migrate" migration partially done and need to be redone from scratchrails“rake db:migrate”迁移部分完成,需要从头开始重做
【发布时间】:2013-10-03 18:29:06
【问题描述】:

我是 ruby​​-on-rails 的新手,并且遇到了困难。

我试着跑 "rake db:migrate" 但由于有错字而被中止。我输入了“用户”而不是“用户”。 因此,我修复了 db/migrate 目录中的 rb 文件并尝试再次运行它,但发现迁移已经部分进行,我无法再次重做。这似乎是像我这样的初学者的常见错误,讲师为此提出了两种解决方案:首先 DROP 中的 SQL 表或第二个 COMMENT OUT 已经运行的部分并运行剩余部分。

但在找到故障排除建议之前,我认为我可以使用不同的文件名 (SIGH),我将“用户”更改为“管理员用户”,将“管理员用户”更改为“管理员用户 2” '。 我没有工作,我放下桌子做了

$ rails 生成迁移 AlterUsers 和 $ rake db:迁移

但它再次中止,因为它找不到这个文件:users.frm。 (我不知道 .frm 文件在哪里……)

非常感谢。

---------------错误信息------ ----------------------

$ rake db:migrate
==  AlterUsers: migrating =====================================================
-- rename_table("users", "admin_users")
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Can't find file: './simple_cms_development/users.frm' (errno: 2 - No such file or directory): RENAME TABLE `users` TO `admin_users`/Users/gymmilo/Sites/simple_cms/db/migrate/20130927112013_alter_users.rb:3:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

---------------迁移文件------ ----------------------

class AlterUsers < ActiveRecord::Migration
  def change
    rename_table("users", "admin_users")
    add_column("admin_users", "username", :string, :limit => 25)
    change_column("admin_users", "email", :string, :limit => 100)
    rename_column("admin_users", "password", "hashed_password")
    add_column("admin_users", "salt", :string, :limit => 40)
    puts "*** About to add an index ***"
    add_index("admin_users", "username")
  end
end

------------------(我已经把桌子掉了一次,结果是这样的!谢谢帮助. --------

mysql> SHOW TABLES;
+----------------------------------+
| Tables_in_simple_cms_development |
+----------------------------------+
| admin_users1                     |
| schema_migrations                |
+----------------------------------+
2 rows in set (0.00 sec)

mysql> DROP TABLE admin_users1;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
$ rake db:migrate
==  AlterUsers: migrating =====================================================
-- rename_table("users", "admin_users")
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Can't find file: './simple_cms_development/users.frm' (errno: 2 - No such file or directory): RENAME TABLE `users` TO `admin_users`/Users/gymmilo/Sites/simple_cms/db/migrate/20130927112013_alter_users.rb:3:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
$ mysql -u simple_cms -p simple_cms_development
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.6.13 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW TABLES;
+----------------------------------+
| Tables_in_simple_cms_development |
+----------------------------------+
| schema_migrations                |
+----------------------------------+
1 row in set (0.00 sec)

mysql> exit
Bye
$ pwd
/Users/gymmilo/Sites/simple_cms
$ rake db:migrate
==  AlterUsers: migrating =====================================================
-- rename_table("users", "admin_users")
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Can't find file: './simple_cms_development/users.frm' (errno: 2 - No such file or directory): RENAME TABLE `users` TO `admin_users`/Users/gymmilo/Sites/simple_cms/db/migrate/20130927112013_alter_users.rb:3:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

【问题讨论】:

  • MySQL 用多个文件表示数据库中的每个表,其中一个文件的扩展名为 FRM。关于users.frm的错误2表示引用的数据库中没有名为“users”的表。您可能想要删除并重新创建您的数据库,或者使用 MySQL 命令行连接到您的数据库并查看您实际拥有的表。

标签: mysql ruby-on-rails database-migration


【解决方案1】:

您可以使用以下命令将数据库重置回原始状态并再次运行迁移。

rake db:reset

【讨论】:

  • 谢谢。我会试一试的!
【解决方案2】:

如果您的数据库来自生产数据库,您可以将其转储到本地计算机并运行 rake db:migrate。

如果只是一个测试数据库,运行“rake db:reset”,整个数据库会被刷新,所有的迁移任务都会被一一执行。

【讨论】:

  • 心存感激的同时也感到惭愧,我想问一下测试数据库和生产数据库有什么区别。我运行的命令是.. $ rails generate migration AlterUsers $ rake db:migrate
  • 我在 Lynda.com 上 Ruby 和 Rails 课程,如果需要,我可以删除和重做任何事情。然后我可以“重置”吗?
猜你喜欢
  • 2013-04-17
  • 2017-02-05
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多