Я работаю над проектом Rails 4 с открытым исходным кодом, который использует PDF Tool Kit («формат pdf-форм») для автоматического заполнения форм PDF на основе информации, хранящейся в приложении база данных. PDFtk требует установки бинарных файлов, а для созданной модели PDFtk требуется путь к двоичным файлам. Путь должен быть динамичным, поэтому он будет работать на Heroku, Mac OS X и Windows. Я могу найти путь на машине * nix с командой «which». Но Windows не использует «which», он использует «где».Использовать Ruby для определения того, отвечает ли платформа команде CLI
Есть ли способ определить, отвечает ли платформа команде, и если да, то выполните команду?
Моя лучшая попытка - обнаружить платформу с помощью RbConfig (см. Ниже). Однако некоторые платформы Windows (например, Cygwin) отвечают на команды * nix. Как пользователь Mac я не знаком с каждой платформой для Windows.
def pdftk
# Use path stored in Heroku env vars or else get path to local binaries
@pdftk ||= PdfForms.new(ENV['PDFTK_PATH'] || local_path)
end
def local_path
os = RbConfig::CONFIG['arch']
if /mswin/ =~ os
path = `where pdftk` # Get pdftk filepath, Windows equiv of *nix 'which' command
else
path = `which pdftk` # Get pdftk filepath on POSIX systems
end
path
end
Не могли бы вы объяснить, зачем вам нужен проект _Rails_ для запуска на хостах Windows? Собираетесь ли вы отправить весь проект конечному пользователю? Является ли пользователь в порядке с установкой проекта rails, я бы пошел с обязательной настройкой в виде 'config.rb' для пути, со значением по умолчанию, установленным для того, где эта библиотека установлена« из коробки ». (Или с настройкой env как вы показали в OP.) – mudasobwa
@mudasobwa Я сотрудничаю удаленно с разработчиками с использованием машин Windows, где некоторые из них не могут/не хотят использовать Cygwin или аналогичные. Использование 'config.rb' с жестко закодированными файловыми путями не устраняет проблему обнаружения платформы. – femmestem
Достаточно честный. Я не имел в виду жестко заданные пути. Я имел в виду, что вы могли бы принудить коллабораторов к изменению содержимого этого файла или установке переменной env. В конце концов, это разработчики, а не клиенты. И, ИМХО, это не кодовое слово, которое действительно нужно отполировать. Определение платформы, как вы показали, уже намного лучше, чем ничего. – mudasobwa