переменная задачи грабли - PullRequest
       16

переменная задачи грабли

18 голосов
/ 01 декабря 2011

У меня есть две Rake-задачи в одном и том же пространстве имен , как показано ниже:

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

Как видите, обе задачи находятся в одном и том же пространстве имен и обе задачи используют server_name='myserver' постоянная переменная .

Действительно уродливо определять переменную server_name дважды в одном и том же пространстве имен. Как можно иметь одно место, определяющее эту переменную, чтобы обе задачи могли ее использовать?

Ответы [ 2 ]

17 голосов
/ 01 декабря 2011

Попробуйте это:

namespace :db do
  server_name='myserver'
  task :first_task => :environment do
    connect_to(server_name)
  end

  task :second_task => :environment do
    do_something_with(server_name)
  end
end

Пространства имен имеют доступ к переменным, объявленным до их области видимости.

6 голосов
/ 11 марта 2013

Я хотел бы опираться на ответ Дэвида Сулька , но я рекомендую использовать вместо него переменную экземпляра:

namespace :db do
  @server_name = 'myserver'

  task first_task: :environment do
    connect_to @server_name
  end

  task second_task: :environment do
    do_something_with @server_name
  end
end

Преимущество здесь в том, что более поздний код может изменить @server_name- то, что вы не можете сделать с локальной переменной:

namespace :db do
  @server_name = 'server_2'
end
...