2012-12-02 3 views
1

J'aime utiliser rake pour gérer mes migrations dans l'environnement de développement, où j'ai permis à mes applications de rails des autorisations complètes sur la base de données dev.rake db: migrer en toute sécurité sur les environnements de stockage et de production

Cependant, dans les environnements de transfert et de production, mon application n'a qu'un accès en écriture, pas la possibilité de modifier les tables.

Je voudrais continuer à utiliser rake db:migrate dans la mise en scène et la production, mais le problème est que rake db utilise le même utilisateur que mon application rails, qui ne dispose pas de privilèges suffisants.

Est-ce que quelqu'un connaît un moyen facile de contourner ce problème, sans avoir à autoriser les privilèges administratifs db dans mon application rails. Par exemple, si je pouvais spécifier -username et -password quand j'exécuterais rake db, ce serait génial.

Répondre

2

Vous pouvez spécifier une connexion migration dans votre config/database.yml avec un utilisateur/pass pour l'utilisateur correctement privilégié et exécuter

RAILS_ENV=migration rake db:migrate 

Modifier Il ressemble à quelque chose comme ça pourrait fonctionner (si je ne me suis jamais testé sur une connexion à distance, uniquement localement). Ajoutez ce qui suit à votre config/database.yml.

<% 
require 'highline/import' 

def request_input(msg, show_input = true) 
    ask(msg) { |q| q.echo = show_input } 
end 
%> 

migration: 
    # Other connection information here (host, adapter, etc..) 
    username: <%= request_input "Username:" %> 
    password: <%= request_input "Password:", false %> 

Lorsque vous exécutez

RAILS_ENV=migration rake db:migrate 

Vous serez invité à entrer le nom d'utilisateur et mot de passe pour la connexion. Assurez-vous d'ajouter

gem 'highline' 

à votre Gemfile.

Source: http://dzone.com/snippets/request-database

+0

Je ne pense à cela, cependant, le problème est que le niveau de la racine d'informations d'authentification db est assis dans un fichier texte non chiffré. J'aimerais éviter cela si possible. –

+0

La solution Highline fonctionne très bien en production. Merci! Il est intéressant de demander deux fois le nom d'utilisateur et le mot de passe, je ne me plains pas - c'est une grande amélioration par rapport à ce que nous avions précédemment :-) –

Questions connexes