Rubylative_path_from вызов в Windows - PullRequest
2 голосов
/ 21 марта 2009

Я столкнулся с проблемой с частью скрипта генерации Rails, которая ищет путь к плагину для файлов с соответствующими именами, чтобы найти генераторы. На одной из моих систем Ruby установлен в c:\dev\ruby, а каталог проекта - d:\local\projects

Метод Ruby Pathname#relative_path_from (который вызывается сценарием генератора Rails) блокирует эту конфигурацию при попытке найти относительный путь между c:\ и d:\ ...

Кто-нибудь сталкивался с такой ситуацией с relative_path_from и несколькими дисками в Windows? Есть ли обходной путь для сценария генератора рельсов?

Вот пример из IRB:

>> x = Pathname.new('c:/dev/ruby')
=> #<Pathname:c:/dev/ruby>
>> y = Pathname.new('d:/local/projects')
=> #<Pathname:d:/local/projects>
>> x.relative_path_from(y)
ArgumentError: different prefix: "c:/" and "d:/local/projects"
        from c:/dev/ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from'
        from (irb)...

Если решения не существует, я всегда могу убедиться, что мои каталоги установки и проекта Ruby находятся на одном диске, но это помешает мне когда-либо работать с каталогом проекта на pendrive ...

ОБНОВЛЕНИЕ: Оказывается, проблема связана именно с некоторыми изменениями, внесенными Radiant CMS в переменные конфигурации Rails. Это изменение добавляет дополнительные каталоги плагинов к проекту, некоторые из которых могут пересекать границы диска. Так как код генератора Rails не ожидает такого скачка диска, генератор ломается на моем компьютере ...

Ответы [ 2 ]

2 голосов
/ 21 марта 2009

Есть ли способ вычислить относительный путь для двух разных дисков в Windows? Я не знаю.

Вы можете избежать этой проблемы, смонтировав диск D: как папку на диске C:, предполагая, что вы используете NTFS. Если это неприемлемо, вы можете создать соединение от D:\local до C:\local, которое позволит вам получить доступ к D:\local из D: и C:. Затем, запуск того же скрипта с диска C: не должен создавать проблем.

0 голосов
/ 27 мая 2010

Проблема заключается в том, что задокументировано в тикете по адресу http://redmine.ruby -lang.org / Issues / Show / 1366

В Windows регистр буквы диска может быть прописным или строчным (например, «C:» или «c:») на одном компьютере одновременно в разных окнах командной строки (см. Ниже для подробности). Dir.pwd будет возвращать букву диска в нижнем или верхнем регистре («C: /» или «c: /») в зависимости от командной строки, из которой он запускается. Однако FILE всегда использует строчную букву диска. Это может вызвать ArgumentError при сравнении Dir.pwd и FILE с использованием Pathname #lative_path_from. Это также происходит с версией 1.9.1p0. Pathname #lative_path_from должен иметь дело со случаем, где регистр аргумента отличается.

У меня есть и папка установки ruby, и папка проекта на диске c:, но я все еще получаю сообщение об ошибке. Я пропатчил следующие строки в файле pathname.rb, как показано ниже, отмеченные двумя звездочками. Удалите две звездочки при установке патча.

  def relative_path_from(base_directory)
    dest_directory = self.cleanpath.to_s.**capitalize!**
    base_directory = base_directory.cleanpath.to_s.**capitalize!**
    ...

Работает после патча. Надеюсь, это поможет.

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