Как использовать «получает» в задаче с рейком?

80

Я получаю сообщение об ошибке всякий раз, когда пытаюсь использовать функцию, попадающую в задачу rake. Есть ли способ заставить его работать?

Ошибка говорит: «нет такого файла или каталога - (название задачи сгребания)»

Джеймс А. Розен
источник
Сообщение об ошибке кажется самоочевидным ...
Митч Уит,
6
Может показаться, но это не так. Смотрите мой ответ ниже. Существует некоторая путаница в отношении разницы между Kernel # gets и STDIN.gets.
Джеймс А. Розен,

Ответы:

158

Проблема в том, что Kernel#gets(это то, что вы вызываете, если вы просто используете getsего) предполагает, что вы извлекаете из файла, названного аргументами, переданными в Rake. Это означает getsпопытку вернуть содержимое файла с именем [rake-task-here], которого почти наверняка не существует.

Попробуй STDIN.gets.

Джеймс А. Розен
источник
3
Малый нит сбор: $stdinвероятно , предпочтительнее , чем STDINздесь, а также увидеть stackoverflow.com/a/4279689/968531
NobodysNightmare
-4

Я не думаю, что вам следует использовать get в задаче rake, если вам нужно получить ввод из командной строки, вы, вероятно, должны передать его в качестве параметра, но если вы разместите какой-то код, который не работает, я уверен вы получите лучший ответ.

ниткодер
источник
21
В общем, аргументы командной строки являются лучшим вариантом, но есть много хороших причины для использования получает в рамках задачи грабель. Большинство из них связано с аутентификацией или проверкой того, что вы действительно хотите делать то, что вы говорите rake. («развернуть производственный код»)
Джеймс А. Розен,