2009-08-19 9 views
1

Existe-t-il un moyen facile d'avoir une action de rails charger un fichier externe de commandes et ensuite les exécuter? Par exemple, j'essaie d'écrire un tas de rails pour créer des méthodes pour pré-remplir un tas de tables dans une base de données.Exécuter des commandes à partir d'un fichier externe dans Rails

Idéalement, je voudrais que l'action vérifie l'existence du fichier, si elle existe, exécute toutes les commandes, puis supprime le fichier afin qu'il ne soit pas exécuté à nouveau.

Ainsi, le fichier externe ressemblerait essentiellement comme ceci:

MyTable.create :name => "New 1" 
MyTable.create :name => "New 2" 

Est-ce facile à réaliser dans des rails?

Certains élaboration:

L'idée serait que si un certain ensemble tables doivent être retouchées après une sortie, et que vous ne pouvez pas le faire à travers un script de migration (c.-à-vous l'initialisation base de données à partir du fichier schema.rb), vous pouvez:

  1. Créer un fichier appelé « update_data.rb » par exemple
  2. Placez-le dans un répertoire admin
  3. cible une action dans le navigateur (par exemple/admin/update_data)
  4. Rails se lise comme suit dans le fichier, l'exécution de la ligne par ligne des commandes, puis
  5. Supprimez le fichier lorsque vous avez terminé afin que les actions ont été accidentellement exécutés à nouveau

Est-ce que l'aide? Ce serait un fichier pour les actions ponctuelles qui doivent être exécutées après une libération. S'il y a une meilleure méthode, je suis certainement tout ouïe!

+0

Bonjour Justin. Pourriez-vous élaborer sur le problème que vous essayez de résoudre? Je suis curieux parce que c'est une chance d'apprendre quelque chose que je ne connaissais pas ou de suggérer une meilleure solution pour vous. – Petros

+0

Ajout d'un peu d'élaboration - merci pour les commentaires – jerhinesmith

Répondre

2

Une autre option serait rake. Vous pouvez créer un nouveau fichier dans les tâches lib/- nous appellerons le vôtre bootstrap.rake

namespace :db do 
    desc 'Load an initial set of data' 
    task :bootstrap => :environment do 
    if your_file_exists 
     puts 'Loading data...' 
     this_is_where_the_magic_happens   
    end 
    end 
end 

Ensuite, à partir de la console, vous pouvez exécuter rake db: bootstrap et planifier avec crontab si vous le souhaitez.

+0

Qu'est-ce qui est exactement représenté par ': bootstrap =>: environment'? Je suppose que bootstrap est le nom de la tâche, mais qu'ajoute le '=>: environnement'? Est-ce que cela introduit simplement une exigence: que l'environnement soit défini? – jerhinesmith

+0

Appel en mode développement: rake db: bootstrap mode de production: rake db: bootstrap RAILS_ENV = production –

+0

J'ai compris, c'est logique. – jerhinesmith

1

Pour l'étape 4:

load("update_data.rb") 

Je crois que ce serait charger et d'exécuter votre script.

Questions connexes