59 votes

Convertir une application Ruby on Rails de sqlite à MySQL?

J'ai créé une application dans Ruby on Rails et je souhaite maintenant qu'elle soit hébergée. Cependant, ils nécessitent que j'utilise MySQL et que je l'installe avec sqLite3. Est-il possible de le convertir pour utiliser MySQL?

119voto

marshally Points 2260

Étape 0

Pour être sûr, je vous recommande d'expérimenter un peu avec cette technique dans une machine virtuelle. Epargnez-vous un tas de chagrin et de construire une machine virtuelle, découvrez votre code, et avoir un bon terrain de jeu que vous pouvez jeter si la tragédie frappe.

Étape 1

Faire une copie de sauvegarde de votre base de données.fichier yml.

(à partir de la racine de votre application)

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

Étape 2

Faire une copie de sauvegarde de vos données

Pour Rails 3, installez le fichier YAML DB gem: https://github.com/ludicast/yaml_db

Pour Les Rails 2.x installer le fichier YAML plugin DB:

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

Exécutez la tâche de vidage

rake db:dump

Étape 3

Mise à jour de votre config/database.fichier yml. Vous trouverez des entrées comme

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

Modifier

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

Assurez-vous de mettre à jour les valeurs entouré par astérix en fonction de votre plate-forme! La prise de valeur est seulement bonne pour Mac OSX utiliser MacPorts. La plupart des versions de linux n'a pas besoin de cette valeur.

Étape 5

Si vous avez quelques erreurs lors de l'étape suivante, vous devrez installer le gem mysql:

sudo gem install mysql

Ont râteau de créer votre base de données

rake db:create
rake db:schema:load

Étape 6

Utilisation YamlDb pour recharger vos données dans MySql

rake db:load

7voto

DanSingerman Points 17301

Tant que vous n'avez pas écrit d'instructions SQL qui s'exécutent dans sqlLite3 et non dans MySQL (ce que vous n'aurez pas si votre accès à la base de données se fait via les migrations ActiveRecord et ActiveRecord), il vous suffit de changer l'adaptateur de base de données dans votre base de données. Fichier de configuration .yml.

6voto

pantulis Points 1212

Vérifiez les robinets . J'ai converti avec succès une base de données Mysql en Postgres - elle devrait prendre en charge SQLite.

Edit: Y compris le lien de travail du commentaire de cony ici.

5voto

Mikaele Points 29
 myproject  user$ cd
user   $ rails new myproject -d mysql
 

Dites «non» pour toutes les questions mais pour Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh] dites «oui».

5voto

ScottJ Points 701

S'il n'y a pas de données à migrer, il suffit de mettre à jour database.yml et d'exécuter 'rake db: schema: load' dans le nouvel environnement. (NOT db: migrate qui ne devrait être utilisé que pour des migrations incrémentielles!)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X