Convertire un’app Ruby on Rails da sqlite a MySQL?

Ho creato un’app in Ruby on Rails e ora voglio averla ospitata. Tuttavia, richiedono che io usi MySQL e lo imposto usando sqLite3. C’è un modo per convertirlo per usare MySQL?

Passaggio 0

Per sicurezza, ti consiglio di sperimentare un po ‘con questa tecnica in una macchina virtuale. Risparmia un po ‘di angoscia e costruisci una macchina virtuale, controlla il tuo codice e disponi di un parco giochi sicuro che puoi buttare via se la tragedia colpisce.

Passo 1

Crea una copia di backup del tuo file database.yml.

(dalla root dell’applicazione)

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

Passo 2

Crea una copia di backup dei tuoi dati

Per Rails 3, installa la gem YAML DB: https://github.com/ludicast/yaml_db

Per Rails 2.x installa il plugin YAML DB:

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

Esegui il dump task

rake db:dump

Passaggio 3

Aggiorna il tuo file config / database.yml. Troverete voci come

 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 

Cambiarli a

 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** 

Assicurati di aggiornare i valori circondati da asterisco come appropriato per la tua piattaforma! Il valore del socket è buono solo per Mac OSX usando MacPorts. La maggior parte dei sapori di Linux non richiede questo valore.

Passaggio 5

Se hai alcuni errori nel passaggio seguente, potresti dover installare mysql gem:

 sudo gem install mysql 

Hanno rake creare il tuo database

 rake db:create rake db:schema:load 

Passaggio 6

Usa YamlDb per ricaricare i tuoi dati in MySql

rake db:load

Finché non hai scritto alcuna istruzione SQL eseguita in sqlLite3 e non in MySQL (che non avrai se tutto il tuo accesso al database avviene tramite le migrazioni ActiveRecord e ActiveRecord) allora tutto quello che devi fare è cambiare la scheda del database nel tuo database file di configurazione .yml.

Controlla i Tap . Ho convertito con successo un database Mysql in Postgres – dovrebbe supportare SQLite.

Modifica: incluso il link di lavoro dal commento di Cony qui.

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

Dì “no” per tutte le domande ma per Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh] Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh] dì “sì”.

Se non ci sono dati da migrare, è sufficiente aggiornare database.yml ed eseguire ‘rake db: schema: carica’ nel nuovo ambiente. (NON db: migrate che dovrebbe essere usato solo per migrazioni incrementali!)