Странная проблема с переменным аргументом в задаче Capistrano - PullRequest
1 голос
/ 25 февраля 2010

Здравствуйте, специалисты по переполнению стека,

У меня возникла очень странная проблема в задаче, которую я создаю с помощью Capistrano.Я пытаюсь передать переменную из командной строки:

>> cap create_dir -s name_of_dir=mydir

task :create_dir do
  printf("#{name_of_dir}")
  if !(exists?(:name_of_dir)) then  
      name_of_dir = Capistrano::CLI.ui.ask("Name of dir to be created.")    
  end   

  full_path = "/home/#{name_of_dir}"
  run "mkdir #{full_path}"

end

Очень странно, что это правильно анализирует переменную, когда я делаю printf, но анализирует как пустую (пустую) строку в следующей команде,Я действительно не могу найти объяснения этому, и я уверен, что это не глупая опечатка или что-то в этом роде?

У меня нет опыта в Ruby, как в Java и PHP, я боюсь, что, возможно, странныйПравило?

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Несколько предложений:

  • Избегайте использования переменных с одинаковыми именами внутренних переменных задачи
  • использовать fetch () вместо того, чтобы иметь дело с выходами? иначе тогда ...

Вот код

>> cap create_dir -s name_of_dir=mydir

task :create_dir do
  printf("#{name_of_dir}")
  directory = fetch(:name_of_dir) { Capistrano::CLI.ui.ask("Name of dir to be created.") }

  full_path = "/home/#{directory}"
  run "mkdir #{full_path}"
end 
2 голосов
/ 26 октября 2010

В более новых версиях capistrano, по крайней мере, начиная с 2.5.19, который я запускаю сейчас, весь аргумент командной строки теперь работает иначе. Вы называете это так.

cap command argument=value

И синтаксис в коде

ENV.has_key?('argument') and ENV['argument']

Вот и все, но вы можете посмотреть на мой пост в блоге об этом для рабочего примера

0 голосов
/ 25 февраля 2010

Похоже, что во второй строке вы проверяете, существует ли символ :name_of_dir, а не фактическое значение переменной name_of_dir.

Поскольку у вас вряд ли будет имя файла name_of_dir, оно будет считаться несуществующим ... и затем name_of_dir (переменная) будет перезаписано командой Capistrano::CLI.ui.ask.

Не знаю почему, но это должно как-то убить его.

Попробуйте удалить «:» и посмотреть, решит ли это проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...