#ruby-on-rails #database #ruby-on-rails-3 #sqlite
#ruby-на-рельсах #База данных #ruby-on-rails-3 #sqlite
Вопрос:
Мне пришлось создать базу данных sqlite3 в моем приложении rails 3.1.1 вручную, преобразовать из базы данных mysql с помощью инструмента mysql2sqlite, а затем запустить:
sqlite3 development.sqlite3 < mysql2sqlite_dump.sql
В любом случае, development.sqlite3
файл есть, и сервер запускается нормально, и все страницы загружаются нормально (никаких ошибок базы данных об отсутствующих таблицах или что-то в этом роде), но данные не считываются … как будто их там не было. Даже запуск Event.all
, например, в консоли дает мне :
Event Load (0.1ms) SELECT "events".* FROM "events"
=> []
Когда на самом деле должно быть несколько событий. Заглядывая в sqlite3
файл, я вижу, что вся информация там есть, но она просто не читается. Я опубликую часть файла базы данных, если кто-нибудь его запросит.
Мой вопрос таков: почему база данных не читается должным образом, и как я могу это сделать?
Спасибо.
Комментарии:
1. Итак, если вы
sqlite3 development.sqlite3
можете выбрать из таблиц, и все есть, верно? Вы уверены, что Rails использует вашdevelopment.sqlite3
файл, а не какой-либо другой файл базы данных SQLite?2. Запуск
select * from events;
в консоли sqlite3 ничего не возвращает. Мойdatabase.yml
файл указывает наdb/development.sqlite3
.3. Хм.
select * from sqlite_master
Говорит ли вам что-нибудь проясняющее?4. Этот скрипт выглядит устаревшим на несколько лет, сколько таблиц вам нужно перенести? Возможно, это будет проще в использовании
mysqldump --compatible=ansi --complete-insert --compact
, исправьте типы в таблицах СОЗДАНИЯ вручную, а затем отправьте их прямо вsqlite3
файл .
Ответ №1:
Что ж, кажется, я решил эту проблему. Проблема заключалась в том, что mysqldump
(выполняемый внутри mysql2sqlite
скрипта) отбрасывал, а затем создавал таблицы (по умолчанию), и это противоречило файлу схемы. Итак, я создал базу данных в соответствии с файлом схемы, а затем снова запустил скрипт с --no-create-info
добавленной опцией for mysqldump
, чтобы он вставлял только информацию.
Всем спасибо за помощь!