Преобразование приложения Ruby on Rails из sqlite в MySQL?


Я сделал приложение в Ruby on Rails, и теперь я хочу, чтобы он был размещен. Однако они требуют, чтобы я использовал MySQL, и я установил его с помощью sqLite3. Есть ли способ преобразовать его в использование MySQL?

5 55

5 ответов:

Шаг 0

чтобы быть в безопасности, я рекомендую немного поэкспериментировать с этой техникой в виртуальной машине. Сохраните себе кучу сердечной боли и создайте виртуальную машину, проверьте свой код и создайте безопасную игровую площадку, которую вы можете выбросить, если произойдет трагедия.

Шаг 1

сделайте резервную копию своей базы данных.yml-файл.

(от корня приложения)

cp config/database.yml config.database.yml.sqlite3

Шаг 2

сделать резервная копия ваших данных

для рельсов 3 Установите YAML DB gem:https://github.com/ludicast/yaml_db

Для Рельсов 2.x установите плагин YAML DB:

script/plugin install git://github.com/adamwiggins/yaml_db.git

запустите задачу дампа

rake db:dump

Шаг 3

обновление конфигурации базы данных.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**

обязательно обновите значения, окруженные asterix в соответствии с вашей платформой! Значение сокета подходит только для Mac OSX с использованием MacPorts. Большинство разновидностей linux не требуют этого значения.

Шаг 5

если у вас есть некоторые ошибки в следующем шаге, возможно, вам придется установить MySQL gem:

sudo gem install mysql

есть грабли создать свою базу данных

rake db:create
rake db:schema:load

Шаг 6

используйте YamlDb для перезагрузки данных в MySql

rake db:load

до тех пор, пока вы не написали никаких инструкций SQL, которые выполняются в sqlLite3, а не MySQL (который у вас не будет, если весь ваш доступ к базе данных осуществляется через ActiveRecord и миграции ActiveRecord), все, что вам нужно сделать, это изменить адаптер базы данных в вашей базе данных.конфигурационный файл yml.

Регистрация Taps. Я успешно преобразовал базу данных Mysql в Postgres с ней-она должна поддерживать SQLite.

Edit: включая рабочую ссылку из комментария кони здесь.

myproject  user$ cd
user   $ rails new myproject -d mysql

сказать " нет " для всех вопросов, но для Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh] сказать "да".

Если нет данных для переноса, просто обновить базу данных.yml и запустите "rake db:schema: load" в новой среде. (Не db:миграция, которая должна использоваться только для инкрементных миграций!)