Направляющие 3: 'потребуйте' в генераторе

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

Таким образом, я создаю файл в папке генератора, и в моем файле генератора, я поместил наверху:

require 'relative/path/to/my/code.rb'

Но когда я запускаю генератор, он говорит мне, что не может найти файл.

activesupport-3.0.0.rc/lib/active_support/dependencies.rb:219:in `require': no such file to load -- relative/path/to/my/code.rb (LoadError)

Кто-либо знает работу вокруг?

1
задан glmxndr 13 August 2010 в 09:02
поделиться

1 ответ

Это зависит от того, какую версию Ruby вы используете.

В 1.8 он должен работать так же, как и вы. В 1.9 вы должны использовать require_relative .

Вы также не должны добавлять ".rb" в конце, это не рекомендуется.

Опасность простого 'require' с относительным путем заключается в том, что если этот сценарий сам требуется другим, тогда путь будет относиться к первому вызываемому сценарию:

rootdir
  - main.rb
  - subdir1
    - second.rb
    - subdir11
      - third.rb

Если вызывается main.rb, а затем требуется second.rb (с 'subdir1 / second' ), а затем вы хотите потребовать third.rb с 'subdir11 / third.rb' , он не будет работать.

Вы можете относиться к первому сценарию ( subdir1 / subdir11 / third.rb ), но это не очень хорошая идея. Вы можете использовать __ FILE __ , а затем сделать его абсолютным путем:

require File.expand_path ('../ subdir11 / third.rb', FILE )

( сначала .. это попасть в каталог, содержащий файл) или

требуется File.dirname ( FILE ) + '/subdir11/third.rb'

Но наиболее распространенной практикой является ссылаться на него из корневого каталога.

В геме вы можете предположить, что корневой каталог находится в $ LOAD_PATH (или вы можете добавить его самостоятельно).

В Rails вы можете использовать require "# {RAILS_ROOT} / path" (rails2) или

require Rails.root.join ('path') (rails3)

2
ответ дан 2 September 2019 в 22:11
поделиться
Другие вопросы по тегам:

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