Migrations de base de données de type Rails?
-
01-07-2019 - |
Question
Existe-t-il des outils de migration de base de données faciles à installer / utiliser (sous Unix) tels que Rails Migrations? J'aime beaucoup l'idée, mais installer Ruby / rails uniquement pour gérer les migrations de ma base de données me semble excessif.
La solution
Utilisez simplement ActiveRecord et un fichier Rakefile simple. Par exemple, si vous placez vos migrations dans un répertoire db / migrate
et que vous avez un fichier database.yml
contenant votre configuration de base de données, ce simple fichier Rakefile devrait fonctionner:
Rakefile:
require 'active_record'
require 'yaml'
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
task :migrate => :environment do
ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
end
task :environment do
ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))
ActiveRecord::Base.logger = Logger.new(STDOUT)
end
database.yml :
adapter: mysql
encoding: utf8
database: test_database
username: root
password:
host: localhost
Ensuite, vous pourrez exécuter rake migrate
et bénéficier de toutes les qualités de migration sans application de rails environnante.
J'ai également un ensemble de scripts bash qui remplissent une fonction très similaire à celle des migrations ActiveRecord, mais ils ne fonctionnent qu'avec Oracle. Je les utilisais avant de passer à Ruby and Rails. Elles sont un peu compliquées et je ne les soutiens pas, mais si cela vous intéresse, n'hésitez pas à me contacter.
Autres conseils
Il existe également un projet intitulé Migration de bases de données Java . Pour obtenir le code, consultez la page de code Google du projet . / p>
Je vois que ce sujet est vraiment vieux, mais je vais participer aux futurs googlers.
J'aime beaucoup utiliser SQLAlchemy et SQLAlchemy-Migrate de Python pour gérer les bases de données qui J'ai besoin du contrôle de version, si vous ne voulez pas utiliser la route ActiveRecord :: Migrate.
Je ne l'ai pas personnellement fait, mais il devrait être possible d'utiliser ActiveRecord :: Migration sans aucun des autres éléments de Rails. Configurer correctement le chemin de chargement serait la partie la plus difficile, mais tout ce dont vous avez besoin, c’est des tâches rake
et du répertoire db / migrate
, ainsi que des gemmes Rails dont ils dépendent, probablement activerecord
, actviesupport
et peut-être quelques autres comme railties
. Je voudrais l'essayer et voir quelles classes manquent et ajouter celles-là.
Dans une entreprise précédente, nous avions créé un outil qui faisait essentiellement ce que fait ActiveRecord :: Migration, à la différence qu’il était écrit en Java sous la forme d’un plug-in Maven. Tout ce que cela a été fait était d'assembler des blobs de texte de scripts SQL. Il faut juste que les noms de fichiers soient dans l’ordre et sachent mettre à jour un tableau de versions.
Ce projet est conçu pour permettre l'exécution de migrations d'enregistrements actifs sans installer Rails:
https://github.com/bretweinraub/rails-free-DB-Migrate
Installez-le (utilisez-le clone) et utilisez-le comme base de votre projet.
Voici un outil pour le faire écrit en Haskell: