tâche rake variable
J'ai deux Râteau tâches sous le même espace de noms comme suit:
namespace :db do
task :first_task => :environment do
server_name='myserver'
connect_to(server_name)
end
task :second_task => :environment do
server_name='myserver'
do_something_with(server_name)
end
end
Comme vous le voyez, les deux tâches sont sous la même espace de noms et les deux tâches utilisation server_name='myserver'
constant variable.
Il semble vraiment moche pour définir la server_name
variable deux fois dans le même espace de noms, comment puis-je avoir une place pour définir cette variable de sorte que les deux tâches peuvent l'utiliser?
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Espaces ont accès aux variables déclarées avant leur portée.
J'aimerais construire sur David Sulc réponse, mais je recommande d'utiliser une variable d'instance à la place:
L'avantage ici est que plus tard, le code peut modifier
@server_name
-- quelque chose que vous ne pouvez pas faire avec une variable locale:Rake.application.in_namespace(name, &block)
(voir github.com/jimweirich/rake/blob/v10.3.2/lib/rake/...). Je ne suis pas sûr de ce que votre préoccupation est.in_namespace()
. Un bloc/Proc
en Ruby obtient liée à un objet au moment où le bloc est déclarée (pas quandcall
ed/yield
ed - sauf pourinstance_eval
et certainsUnboundMethod#bind
magie que tu ne veux pas le savoir). Comme je vois,TaskManager#in_namespace
ne fait aucun usage deinstance_eval
conduisant ainsi à partager toutes les variables d'instance parmi tous lesrake
tâches. Si ce désordre qui fonctionne pour vous, c'est ok pour vous, mais ce n'est certainement pas une meilleure façon.server_name
comme mon exemple a montré? (Cet exemple est une des raisons pourquoi j'ai suggéré cette approche, mais je suis tout à fait ouvert à de meilleurs moyens.)