2013-09-27 1 views
3

Я новичок в рубинах на рельсах и с трудом.рельсы «rake db: migrate» частично выполнены и нужно переделать с нуля

Я попытался запустить «rake db: migrate», но он был прерван, потому что была опечатка. Я набрал «пользователей» вместо «пользователей». Поэтому я исправил файл rb в каталоге db/migrate и попытался запустить его снова, только чтобы найти миграцию уже частично, и я не могу повторить ее снова. Похоже, что это обычная ошибка новичка, подобного мне, и преподаватель представил два решения для этого: сначала DROP таблицу в SQL или второй COMMENT OUT уже запущенную часть и запустите оставшуюся часть.

Но прежде чем я нашел бесперебойный стреляя совет, я думал, что я могу просто использовать другое имя файла (вздыхать) и я изменил «пользователей» на «admin_user» и «admin_user» до «admin_user2». я не работал, и я упал на стол и сделал

$ рельсов генерировать миграции AlterUsers и $ рейки дб: мигрировать

Но прерван снова, потому что он не может найти этот файл: 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) 

+0

MySQL представляет каждую таблицу в базе данных с несколькими файлами, одна из которых имеет расширение FRM. Ошибка 2 о users.frm указывает на отсутствие таблицы с именем «пользователи» в ссылочной базе данных. Возможно, вы захотите либо сбросить, либо воссоздать свою базу данных, либо использовать командную строку MySQL для подключения к вашей базе данных и посмотреть, какие таблицы у вас на самом деле. –

ответ

2

Вы можете вернуть базу данных обратно в исходное состояние с помощью следующей команды и выполнить миграцию снова.

rake db:reset 
+0

Спасибо. Я дам ему попробовать! – user2809703

0

Если база данных происходит из рабочей базы данных, вы можете сбросить его на локальный компьютер и запустить грабли БД: мигрировать.

Если это всего лишь тестовая база данных, запустите «rake db: reset», и вся база данных будет обновлена, и все задачи миграции будут выполняться один за другим.

+0

Будучи благодарным и стыдясь в то же время, я должен спросить, какая разница между тестовой базой данных и производственной базой данных. Команды, которые я запускал, это .. $ rails генерировать миграцию AlterUsers $ rake db: migrate – user2809703

+0

Я нахожусь на курсе Ruby and Rails Lynda.com, и я могу удалить и повторить что-нибудь, если мне нужно. Тогда я могу просто " сброс'? – user2809703

+0

Да, просто сделай это. :) –