Конвертировать приложение Ruby on Rails из sqlite в MySQL?
Я сделал приложение в Ruby on Rails, и теперь хочу, чтобы он был размещен. Тем не менее, они требуют, чтобы я использовал MySQL, и я настроил его с помощью sqlite3. Есть ли способ конвертировать его в MySQL?
- Проверить наличие одного поля (XOR)
- Разница между form_for, form_tag?
- net :: ERR_INCOMPLETE_CHUNKED_ENCODING только в Chrome
- Как реализовать систему достижений в RoR
- переменная экземпляра против символа в rubyе на рельсах (form_for)
- путают autoload_paths vs eager_load_paths в рельсах 4
- Переадресовывают ли redirect_to и обмениваются?
- Rails 3 SSL Устаревание
Шаг 0
Чтобы быть в безопасности, я рекомендую немного поэкспериментировать с этой техникой на виртуальной машине. Спасите себя кучей страдания и создайте виртуальную машину, проверьте свой код и получите безопасную игровую площадку, которую можно выбросить, если ударит трагедия.
Шаг 1
Сделайте резервную копию вашего файла database.yml.
(из вашего корня приложения)
cp config/database.yml config.database.yml.sqlite3
Шаг 2
Сделайте резервную копию данных
Для Rails 3 установите JAML DB gem: 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
Если на следующем шаге есть некоторые ошибки, возможно, вам придется установить gem mysql:
sudo gem install mysql
Создайте свою базу данных rake
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]
Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]
говорят «да».
Если нет данных для переноса, просто обновите database.yml и запустите «rake db: schema: load» в новой среде. (НЕ db: migrate, который должен использоваться только для дополнительных перемещений!)