Почему делает Ruby 1.9.2, удаляют “.” из LOAD_PATH, и какова альтернатива?

Последние changesets к Ruby 1.9.2 больше не делают текущий каталог . часть Вашего LOAD_PATH. У меня есть нетривиальное число Rakefiles, которые принимают это . часть LOAD_PATH, таким образом, это повредило их (они сообщили, что "никакой такой файл для загрузки" для всех не требует операторов, которые базировались от пути проекта). Было ли конкретное выравнивание для того, чтобы сделать это?

Что касается фиксации, добавляя $: << "." везде работы, но кажется невероятно hacky, и я не хочу делать это. Что предпочтительный путь состоит в том, чтобы сделать мой Rakefiles 1.9.2 + совместимым?

154
задан Milele 25 April 2011 в 23:52
поделиться

3 ответа

Это было сочтено риском "безопасности".

Вы можете обойти это, используя абсолютные пути

File.expand_path(__FILE__) et al

или делая

require './filename' (ironically).

или используя

require_relative 'filename'

или добавляя каталог "include"

ruby -I . ...

или то же самое, используя irb;

$irb -I .
140
ответ дан 23 November 2019 в 22:02
поделиться

'.' на вашем пути долгое время считалось плохим в мире Unix (см., например, http://www.faqs.org/faqs/unix-faq/faq/part2/section-13.html ]). Я полагаю, что ребят из Ruby убедили в целесообразности этого не делать.

6
ответ дан 23 November 2019 в 22:02
поделиться

Есть две причины:

  • надежность и
  • безопасность

Обе основаны на одном и том же базовом принципе: в общем случае вы просто не можете знать, каков текущий каталог, когда выполняется ваш код. Это означает, что когда вы требуете файл и зависите от того, что он находится в текущем каталоге, у вас нет возможности проконтролировать, будет ли этот файл там вообще, или это будет тот файл, который вы ожидаете там найти.

34
ответ дан 23 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: