Remarque: Roundhouse est "abandonné"
Roundhouse est un merveilleux outil, et j'ai été l'un des principaux mainteneurs pendant quelques années, car personne d'autre ne le maintenait, et cela m'a fourni une grande valeur. Cependant, le projet existe depuis de nombreuses années et a commencé à accumuler une dette technique qui est devenue difficile à travailler lorsqu'il tentait d'introduire de nouvelles fonctionnalités ou de refactor.
Après avoir réfléchi, j'ai décidé de partir de zéro et de créer un successeur à Roundhouse, à partir de zéro sur .NET moderne (a commencé sur .NET 6 en 2021, maintenant sur .net 8), multiplateforme, en utilisant Les dernières bibliothèques tierces à se connecter aux différentes bases de données, etc. J'ai supprimé Nhibernate comme dépendance, car il n'a été utilisé que pour créer les tables de version, et je semblait être un peu exagéré, et il était difficile de déplacer la technologie rapide vers l'avant sage avec une telle dépendance. Log4NET a également été remplacé par Serilog.
Roundhouse ne disparaîtra bien sûr jamais et le code source restera ici. Mais il n'y a pas de développement actif de Roundhouse pour l'instant. Je continue mon voyage avec le successeur, Grate. Il est maintenant sur la version 1.6 et considéré comme stable. C'est en développement actif.
Veuillez vous diriger là-bas et essayez-le. Si vous devez être presque complet avec Roundhouse, et si vous trouvez tout ce qui manque, veuillez déposer un problème ou soumettre un PR.
Project Roundhouse - Gestion du changement de base de données bien fait

LICENCE
Apache 2.0 - Voir Docs Legal (juste légal dans le dossier zip)
Documentation
Wiki
Informations
Aperçu
Roundhouse est un système de déploiement automatisé de base de données (gestion du changement) qui vous permet d'utiliser vos idiomes actuels et de gagner beaucoup plus. Fonctionne actuellement avec Oracle 1 , SQL Server (2000/2005/2008 / Express), Access 1 , MySQL, SQLite et PostgreSQL. Il existe des plans futurs pour d'autres bases de données.
Il cherche à résoudre à la fois les problèmes de maintenance et la facilité de déploiement. Nous suivons certains des mêmes idiomes que d'autres systèmes de gestion de base de données (scripts SQL), mais nous sommes différents en ce que nous pensons aux futurs problèmes de maintenance. Nous voulons toujours appliquer certains scripts (tout ce qui est sans état comme les fonctions, les vues, les procédures stockées et les autorisations), nous n'avons donc pas à tout jeter dans nos scripts de changement. Cela cherche à résoudre les futures problèmes de contrôle des sources. À quel point est-il doux lorsque vous pouvez version de la base de données en fonction de votre version actuelle de contrôle source?
1) uniquement sur le travail complet sur Windows, pas sur la version multiplateforme .net Core Global Tool.
Début avec Roundhouse
Téléchargements
Vous pouvez télécharger Roundhouse depuis https://github.com/chucknorris/roundhouse/releases
Vous pouvez également obtenir une copie à partir du serveur de construction à https://ci.appveyor.com/project/chucknorris/roundhouse/build/artifacts.
Gemmes ( non mis à jour pour 0.9.0 et plus, désolé )
Si vous avez installé Ruby 1.8.6+ (et GEMS 1.3.7+), vous pouvez obtenir rapidement la version actuelle de Roundhouse sur votre machine!
- Type
gem install roundhouse
- Ensuite, de n'importe où, vous pouvez taper
rh [options]
Nuget
Avec Nuget, vous pouvez obtenir rapidement la version actuelle de Roundhouse à votre application!
- Dans Visual Studio Package Manager Console Type
install-package roundhouse
- Il y a aussi
roundhouse.lib
, roundhouse.msbuild
et roundhouse.refreshdatabase
Chocolaté
Chocolatey est comme apt-get, mais pour les fenêtres! Il s'agit d'une autre méthode pour amener rapidement la version actuelle de Roundhouse à votre machine!
- Type
cinst roundhouse
- Ensuite, de n'importe où, vous pouvez taper
rh [options]
Outil Global Dotnet Core (Windows, Linux, MacOS, etc.)
- Tapez
dotnet tool install -g dotnet-roundhouse
- Ensuite, de n'importe où, vous pouvez taper
rh [options]
Vous pouvez en savoir plus sur ce qui se passe en arrière-plan, par exemple: https://natemcmaster.com/blog/2018/05/12/dotnet-global-tools/, mais en bref, il installe les binaires sur votre ~/.dotnet/tools
.
Vous aurez besoin de Dotnet Core installé sur votre boîte pour que cela fonctionne. Vous pouvez l'obtenir ici: https://dot.net.
Docker: Dotnet Core Global Tool
Vous pouvez facilement intégrer Roundhouse dans votre infrastructure Docker existante. Utilisez Docker Compose, ou retirez-le directement et exécutez-le. Vous devriez probablement construire sur l'image et ajouter vos propres personnalisations, selon le cas. L'image Docker a la distribution des outils globaux Dotnet Core de Roundhouse dans une image de base Debian 10 Linux.
- Type
docker pull dotnetroundhouse/roundhouse
- Type
docker run dotnetroundhouse/roundhouse
Source
C'est la meilleure façon de se rendre au bord saignant de ce que nous faisons.
- Clone la source jusqu'à votre machine.
git clone git://github.com/chucknorris/roundhouse.git
- Type
cd roundhouse
- Tapez
git config core.autocrlf false
pour laisser les terminaisons de ligne telles qu'elles sont. - Tapez
git status
. Vous ne devriez pas voir de fichiers pour changer. - Exécutez
build.ps1
. Remarque: vous devez avoir Git sur le chemin (ouvrez une ligne de commande régulière et tapez git).
Développement
Le système de construction utilise Uppercut, mais cela ne sera probablement pas maintenu à l'avenir. Nous essaierons de standardiser sur des outils de construction plus "Stream principal" comme MSBuild et PowerShell. Il y a encore quelques restes d'Uppercut dans le code source (en particulier dans le dossier build
), mais cela va probablement être supprimé dans un avenir proche.
Pour travailler avec la ligne de commande, vous aurez besoin de ce qui suit sur votre chemin:
- MS Build
- Gitversion (plus facile à courir choco installer gitversion.portable. Vous utilisez chocolaté, n'est-ce pas?)
- Nuget Command Line (plus facile à exécuter Choco Installer Nuget.Commandline. Vous utilisez Chocolatey, n'est-ce pas?)
IMPORTANT
Remarque: Si vous regardez la source - veuillez exécuter Build.PS1 avant d'ouvrir la solution. Il extrait les fichiers keywords.txt
nécessaires aux DLL MySQL ilmerge-ing, et Build se plaindra sans eux.
EXIGENCES
- .NET Framework 4.6.1 (pour la version complète du framework), ou
- .NET Core 2.1+ (pour la distribution de noyau Dotnet)
- SA Accès au serveur SQL (pour la création ou la suppression)
- Changer l'accès à la base de données (pour tout le reste)
FAIRE UN DON
Les dons acceptés - Si vous aimez utiliser ce produit ou si cela vous a fait gagner du temps et de l'argent d'une manière ou d'une autre, veuillez envisager de faire un don.
Il aide à garder le produit mis à jour, paie pour l'hébergement de sites, etc. https://www.paypal.com/cgi-bin/webscr?cmd=_S-XClick&hosted_button_id=2ra38uksk6ezu
Notes de libération
Veuillez consulter les versions des journaux de version complète
1.0.2
Version de bugfix
Correction d'un bug dans l'emballage de l'outil DOTNET Core, et un autre bug avec des chemins de dossier de journal et un colon dans la chaîne de connexion.
1.0.1
Fix de libération de fusion-error
1.0.0
Proplateforme Dotnet Core et DotNet Standard ++
Grande libération technologique. Roundhouse s'exécute désormais sur .NET Core en plus du bon, ancien .NET Framework.
0.9.1
Deux bugfixs
Après la version 0.9.0, les utilisateurs ont identifié deux bogues significatifs. Ceux-ci sont fixés dans une version rapide.
(Voir version pour les notes de version complète)
0.9.0
Concentrez-vous sur la modernisation des outils
Roundhouse a eu un rattrapage pour faire en termes d'outillage. Dépendance à .NET 3.5, ancienne chaîne de construction basée sur Nant, etc. Nous commençons ce travail. Ce n'est pas encore fait, mais sur son chemin. En termes de fonctionnalités, pas grand-chose à se vanter, mais Rh.exe devrait désormais être en mesure d'exécuter sur Windows Server 2016 à l'extérieur de la boîte, car il ne dépend plus de .NET 3.5.
(Voir version pour les notes de version complète)
0.8.8
Rattraper les demandes de traction (voir version des notes de sortie)
0.8.7
OH MON DIEU!! C'est une sortie de la rond !!
Ça fait longtemps à venir. Je ne voulais pas m'enliser dans la rédaction des notes de sortie parfaites, donc je résume les quatre dernières années de l'histoire des engagements. J'espère que personne qui a contribué ne se sent mal par mon incapacité à reconnaître spécifiquement votre contribution. J'ai l'intention de faire mieux à l'avenir.
Améliorations
- Option ajoutée pour exécuter des scripts en dehors de la portée des transactions
- Gérer les chaînes de connexion Azure
- Les fichiers divisés correctement qui commencent par un séparateur
- Respecter le drapeau de la transaction
- Journalisation améliorée
- Interrupteur ajouté - WarnandignoreOonETimescriptChanges
Correctifs de bugs
- Réessayer uniquement sur les erreurs de connexion SQL
- Gérer correctement l'erreur éliminée de la connexion postgres
0.8.6
Améliorations
- Utilisez GIT comme référentiel officiel. (Mpareja)
- Mettre à niveau Uppercut vers la version 1.4.2. (ferventcoder)
- Restauration de la base de données: utilisez la restauration de la valeur d'expiration spécifique. (Icetoast - Pull # 90)
- Ignorez le format EOL change lors de la détection des changements de script. (Lahma - Pull # 104)
- Inclure les instructions d'impression SQL dans le journal de débogage. (Ferventcoder - Numéro 68)
- Inclure l'instruction exécutée dans le journal lorsqu'une erreur se produit. (Ferventcoder - Numéro 66)
- Ajout du répertoire «runbeforeup» à tout moment. (cdrexle - pull # 51)
- Prise en charge de la version de résolution d'un fichier texte. (Mpareja - Pull # 50, Pull # 55)
- Ajoutez une option pour désactiver la copie des scripts en répertoire «itemsRan». (Lahma - Pull # 47)
- WarNononEtimeScriptchange entraînera désormais une réévaluation des scripts uniques modifiés. (BiggerNoise - Pull # 35)
- Mettre à niveau Nhibernate vers la version 3.3.2. (Drudellers)
- Mettez à niveau Fubucore, HTMLTAGS et structuremap. (Drudellers)
Correctifs de bugs
- Parser SQL Batch: gérer les commentaires de formation, citations uniques. (Mpareja - Pull # 108)
- Parser SQL Batch: Fix Hang. (AndersMalmgren - Pull # 100)
- Remplaceur de jeton: Préserver le boîtier pour les jetons inégalés. (Mpareja - Pull # 65)
- Les scripts SQL ne sont plus tronqués à 4000 caractères. (Charoco, Ferventcoder - Pull # 61)
- Oracle: Correction de la gestion des valeurs nuls. (RDINGWALL - Pull # 59, numéro 58)
- Script Fichier Versionner: Correction de l'exception. (Michael Kobaly - Issue # 68 sur Google Code)
- Ne modifiez que le mode de récupération de base de données si l'on dit explicitement. (Ferventcoder - Issue # 69 sur Google Code)
- Correction du commutateur de ligne de commande de débogage. (Ferventcoder - Numéro 40)
- Assurez-vous que la version 1.2.10 de Log4Net est utilisée lors de l'installation des packages NuGet. (Ferventcoder - Numéro 41)
- Correction: améliorer la journalisation des exceptions RH. (Torkelo - Pull # 60)
Changements de rupture
- Roundhouse modifiera le mode de récupération DB si l'option Mode
recoverymode
est explicitement définie sur simple
ou full
. Dans le passé, Roundhouse serait par full
, mais ne définirait jamais le mode de récupération lors de la création / restauration de la base de données. Si vous dépendez de Roundhouse pour créer / restaurer la base de données pour vous et que vous ne souhaitez pas que le serveur de données de données soit utilisé par défaut, vous devez spécifier l'option Mode de récupération.
0,8,5
- Correction: KeyNotFoundException dans NHiberNaSessionFactoryBuilder. Voir [Numéro 59] (http://code.google.com/p/roundhouse/issues/detail?id=59) pour plus de détails. (R361)
- Support SQLite! . Voir les détails n ° 21 (R360)
- Support postgresql! Merci siImv! Voir les détails n ° 30 (R359)
- Nouveau commutateur de configuration! SearchAllSubDirectriesInSteadofTraverse - Tous les sous-dossiers de migrations sont traversés par défaut et exécutés dans l'ordre des scripts de chaque dossier. Cette option exécute tous les éléments dans les sous-dossiers en même temps. Merci siImv! Voir les détails n ° 31 (R359)
- Correction: les transactions ne fonctionnent pas avec la restauration. Voir les détails n ° 26 (R357)
- Correction: Correction d'un bogue méchant avec SQL Server où il essaie de maintenir une connexion (interfère avec le mode Drop / Create) et donne une erreur de transport. Voir les détails n ° 12 (R357)
- Nouveau résolveur de version! - version de numéro de script. Voir les détails n ° 25 (R356)
- Correction: le script de création personnalisé doit diviser les instructions de lots. Voir les détails n ° 22 (R353)
- Nouveau dossier de migrations! RunAfterCreateDatabaseFolder - ne fonctionne qu'une seule fois et seulement après la création d'une base de données. Cela fonctionne avec un ensemble limité de types de bases de données pour le moment. Veuillez tester si vous prévoyez d'utiliser. Voir les détails n ° 20 (R351)
- Presque tout est désormais internalisé. Voir les détails n ° 8 et n ° 15 (R350)
- Correction: Impossible de supprimer des bases de données avec des instantanés. Voir les détails n ° 13 (R349)
- Créer un script personnalisé de la base de données peut gérer les chemins de fichier. Voir les détails n ° 17 (R348)
- Correction: SQL Server 2000 doit créer toutes ses tables. Voir les détails n ° 18 (R346)
- Les assemblages RH sont désormais signés. Voir les détails n ° 14 (R342)
- Correction: supprimé l'emplacement du journal temporaire. Voir les détails n ° 7 (R340)
- Nouveau commutateur de configuration! DisableTokenReplacement - Le remplacement du jeton doit être configurable. Voir le numéro 56 pour plus de détails. (R339)
- Correction: le remplacement du jeton ne doit remplacer que les éléments qu'il trouve. Voir le numéro 56 pour plus de détails. (R339)
- Changement de rupture possible! L'encodage des fichiers essaiera toujours de lire les fichiers comme UTF-8, mais retombera à ANSI. Vous ne pouvez pas vous tromper si vous codez dans ANSI. Voir le numéro 39 pour plus de détails. (R337)
- Les restaurations sont un peu plus intelligentes de déplacer les fichiers vers un emplacement par défaut lorsque l'on n'a pas été spécifié. Voir les détails n ° 9 ou numéro 13 (R336)
- Correction: n'exécutez pas le remplacement du jeton sur le texte vide. Voir les détails n ° 10 (R330)
- Les scripts personnalisés exécutent également le remplacement du jeton (R321)
- Nouveaux commutateurs de configuration! Deux nouveaux commutateurs disponibles - CommandTimeout et CommandtimeoutAdmin! (R329)
- Correction: Migrer n'essaie pas de configurer Log4Net maintenant (provoque des problèmes avec des bibliothèques qui le font) (R326)
- Nouveau dossier de migrations! Index Dossier maintenant disponible (R327)
- Nouveau dossier de migrations! Dossier alterdatabase maintenant disponible. Voir les détails n ° 6 (R324)
- Correction: échantillon inclus pour Oracle ne fonctionne pas. Voir [Numéro 55] (http://code.google.com/p/roundhouse/issues/detail?id=55) pour plus de détails. (R322)
- Les options de restauration personnalisées doivent utiliser le remplacement des jetons (R321)
- MySQL Support! . Merci Diyan. Voir les détails n ° 3 (R320)
0.8.0.300
- RH effectue désormais des jetons dans les fichiers SQL à l'aide de '{{PropertyName}}'. Voir [Numéro 33] (http://code.google.com/p/roundhouse/issues/detail?id=33) pour plus de détails. (R299)
- Exécutez toujours des fichiers qui ont «. dans le nom. Voir [Numéro 51] (http://code.google.com/p/roundhouse/issues/detail?id=51) pour plus de détails. (R299)
- Roundhouse expédient une DLL pour intégrer. Voir [Numéro 44] (http://code.google.com/p/roundhouse/issues/detail?id=44) pour plus de détails. Il a une interface semi-fluent - voir (https://gist.github.com/977990) pour plus de détails. (R299)
- Correction: les fichiers spécifiques à l'environnement exécutent d'autres environnements lorsque d'autres environnements font partie du nom (c'est-à-dire que Bobest est exécuté avec le test). Voir [Numéro 50] (http://code.google.com/p/roundhouse/issues/detail?id=50) pour plus de détails. (R299)
- Un dossier qui s'exécute après les autres dossiers de scripts a été ajouté. Voir n ° 1 pour plus de détails. (R297)
- Correction du script modifié deux fois en cours d'exécution à chaque fois. Voir # 5 pour plus de détails. (R296)
- Sample est maintenant un projet dans le dossier de version. (R287)
- Msbuild est à nouveau disponible. (R288)
0.7.0.281
- Correction de quelques problèmes avec l'utilisation de la chaîne de connexion. Vous devriez maintenant être en mesure de ne fournir que la chaîne de connexion et non le serveur / la base de données.
0.7.0.276
- Correction d'un problème de collation avec des colonnes d'identification rond dans ses tables de suivi. Voir [Numéro 46] (http://code.google.com/p/roundhouse/issues/detail?id=46) pour plus de détails. (R274)
- RestoreFRompath peut suivre un chemin relatif. (R269)
- RH peut désormais mettre à niveau ses internes sans interaction utilisateur. Voir [Numéro 40] (http://code.google.com/p/roundhouse/issues/detail?id=40) pour plus de détails. (R268)
- Les tâches MSBuild / Nant sont obsolètes et ne sont plus connectées. Veuillez utiliser la console et l'appeler à partir de vos tâches. (R268)
- RH a un support de différenciation avec la génération / les mises à jour du schéma nhibernate (R267 - branche, R268)
- Fluentnhibernate et nhibernate sont maintenant utilisés pour les internes (R267 - branche, R268)
- SMO est déprécié et supprimé (R203 - branche, R268)
- Gemmes et améliorations de construction, oh mon Dieu! (R259)
- SQL2000 à 2005 est désormais une transition en douceur. (R221)
- Correction: SQL2000 - Scriptsrun fait désormais référence correctement à la version pour la clé étrangère. (R220)
- Correction: la connexion doit être initialisée avant de demander à la base de données si elle prend en charge les transactions DDL. (R215)
- Correction: noms d'utilisateurs en majuscules lors de l'exécution avec Oracle. (R200)
- RH a un support différencié avec Redgate. Voir exemple de projet pour plus de détails. (R197)
- Correction: les erreurs d'exécution des scripts mettent désormais à jour le numéro de version et le chemin avec une dépendance à l'exécution des scripts. Permet de terminer pendant les exécutions transactionnelles et de capturer toujours des erreurs. (R196)
- Correction: Capturez les modifications errortastiques des fichiers DDL / DML (UP) dans la table Erreurs d'exécution du script. (R191)
- Ajout de la chaîne de connexion admin pour effectuer des tâches administratives. (R190)
Notes de libération antérieures
Les notes de versions antérieures sont sur le wiki.
Crédits
Uppercut - builds automatisés (construction automatisée en 10 minutes ou moins ?!) http://projectuppercut.org