Преобразовать приложение Ruby on Rails из sqlite в MySQL?
Я сделал приложение в Ruby on Rails, и теперь я хочу, чтобы оно было размещено. Тем не менее, они требуют, чтобы я использовал MySQL и настроил его с помощью sqLite3. Есть ли способ конвертировать его для использования MySQL?
5 ответов
Шаг 0
Чтобы быть в безопасности, я рекомендую немного поэкспериментировать с этой техникой на виртуальной машине. Спасите себя от душевных страданий и создайте виртуальную машину, проверьте свой код и получите безопасную игровую площадку, которую вы можете выбросить, если случится трагедия.
Шаг 1
Сделайте резервную копию вашего файла database.yml.
(из корня вашего приложения)
cp config/database.yml config.database.yml.sqlite3
Шаг 2
Сделайте резервную копию ваших данных
Для Rails 3 установите гем YAML DB: https://github.com/ludicast/yaml_db
Для Rails 2.x установите плагин YAML DB:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Запустите задачу дампа
rake db:dump
Шаг 3
Обновите файл config/database.yml. Вы найдете записи, как
development:
adapter: sqlite3
database: db/development.sqlite3
timeout: 5000
test:
adapter: sqlite3
database: db/test.sqlite3
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
timeout: 5000
Измените их на
development:
adapter: mysql
encoding: utf8
reconnect: false
database: **myapp_development**
pool: 5
username: **root**
password: **supersecretpassword**
**socket: /opt/local/var/run/mysql5/mysqld.sock**
test:
adapter: mysql
encoding: utf8
reconnect: false
database: **myapp_test**
pool: 5
username: **root**
password: **supersecretpassword**
socket: **/opt/local/var/run/mysql5/mysqld.sock**
production:
adapter: mysql
encoding: utf8
reconnect: false
database: **myapp_production**
pool: 5
username: **root**
password: **supersecretpassword**
socket: **/opt/local/var/run/mysql5/mysqld.sock**
Обязательно обновите значения в звездочке, соответствующие вашей платформе! Значение сокета подходит только для Mac OSX с использованием MacPorts. Большинство вкусов Linux не требуют этого значения.
Шаг 5
Если у вас есть ошибки на следующем шаге, вам, возможно, придется установить гем mysql:
sudo gem install mysql
Рейк создать вашу базу данных
rake db:create
rake db:schema:load
Шаг 6
Используйте YamlDb для перезагрузки ваших данных в MySql
rake db:load
Пока вы не написали никаких операторов SQL, которые выполняются в sqlLite3, а не в MySQL (чего у вас не будет, если весь ваш доступ к базе данных осуществляется через миграции ActiveRecord и ActiveRecord), все, что вам нужно сделать, - это изменить адаптер базы данных в вашей базе данных. Конфигурационный файл.yml.
Проверьте краны. Я успешно преобразовал базу данных Mysql в Postgres вместе с ней - она должна поддерживать SQLite.
Изменить: Включая рабочую ссылку из комментария Кони здесь.
myproject user$ cd
user $ rails new myproject -d mysql
Скажи "нет" на все вопросы, кроме Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]
скажи да'.
Если нет данных для переноса, просто обновите database.yml и запустите 'rake db:schema:load' в новой среде. (НЕ db:migrate, который следует использовать только для пошаговых миграций!)