Нет проблем при чтении файла из шаблона. Если бы вы жестко закодировали путь к исходной копии 960.sass, тогда он бы работал нормально.
Как вы подозреваете, проблема заключается в использовании __FILE__
. Причина в том, что если вы посмотрите в rails-2.3.4 \ lib \ rails_generator \ generators \ application \ app \ template_runner.rb , вы увидите, что load_template
загружает шаблон в строку и затем выполняет его используя instance_eval
:
def load_template(template)
begin
code = open(template).read
in_root { self.instance_eval(code) }
rescue LoadError, Errno::ENOENT => e
raise "The template [#{template}] could not be loaded. Error: #{e}"
end
end
Следовательно, когда ваш код выполняется, контекст является блоком eval, и __FILE__
не будет указывать на ваш файл.
Хорошей новостью является то, что параметр template
, переданный в load_template
(содержащий путь к вашему шаблону), является локальной переменной в точке, когда вызывается instance_eval
, и поэтому доступен из кода внутри вашего шаблона. Если вместо этого вы просто делаете:
File.dirname(template)
тогда должно работать. Однако помните, что вы привязываете свой код к текущей реализации load_template
, которая может измениться в будущем.