Подтвердить что ты не робот

Конвертировать приложение Ruby on Rails из sqlite в MySQL?

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

4b9b3361

Ответ 1

Шаг 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

Ответ 2

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

Ответ 3

Отметьте Taps. Я успешно конвертировал базу данных Mysql в Postgres с ней - она ​​должна поддерживать SQLite.

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

Ответ 4

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

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

Ответ 5

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