J’utilise un script shell pour exécuter des scripts runner dans mon application Ruby on Rails. Je dois l’exécuter sur la firebase database de production, mais les suivantes:
#!/bin/bash /usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb
donne une erreur:
/usr/bin/ruby: No such file or directory -- RAILS_ENV=production (LoadError)
J’ai essayé de le forcer dans config / environment.rb
ENV['RAILS_ENV'] ||= 'production'
ou même
ENV['RAILS_ENV'] = 'production'
mais même avec cela, il fonctionne toujours dans l’environnement de développement.
Mise à jour: je peux forcer les scripts à se connecter à la bonne firebase database en éditant le fichier config / database.yml, mais je me demande quelle est la bonne façon de le faire.
L’aide sur la ligne de commande pour script / runner vous donne votre réponse.
script/runner -e production Model.method
Si c’est votre commande, l’ordre de vos arguments est votre plus gros problème.
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb
Est différent de.
/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production
Le deuxième exemple est la recherche du fichier, le premier consiste à définir une variable d’exécution pendant que Ruby l’interprète comme le fichier à exécuter.
Si vous refaites votre script comme ceci:
#!/bin/bash RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb
… cela le fera durer toute la vie du script. Pour le faire coller pendant la durée de la session du shell, changez-le en
#!/bin/bash export RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb
Vous pouvez définir la variable d’environnement comme ceci:
RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!'
ça a fonctionné pour moi