Ich arbeite an einem Open-Source-Rails 4-Projekt, das PDF Tool Kit (PDF-Formulare 'Gem) verwendet, um PDF-Formulare basierend auf in den App gespeicherten Informationen automatisch zu füllen Datenbank. PDFtk erfordert die Installation von Binärdateien und das instanziierte PDFtk-Modell erfordert einen Pfad zu den Binärdateien. Der Pfad muss dynamisch sein, damit er auf Heroku, Mac OS X und Windows funktioniert. Ich kann den Pfad auf einer * nix-Maschine mit dem 'which' Befehl finden. Windows verwendet jedoch nicht 'which', sondern 'where'.Verwenden Sie Ruby, um zu erkennen, ob Plattform auf CLI-Befehl reagiert
Gibt es eine Möglichkeit festzustellen, ob die Plattform auf einen Befehl reagiert, und wenn ja, dann Befehl ausführen?
Mein bester Versuch ist es, Plattform mit RbConfig zu erkennen (siehe unten). Einige Windows-Plattformen (z. B. Cygwin) reagieren jedoch auf * nix-Befehle. Als Mac Benutzer kenne ich nicht jede Plattform für 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
Könnten Sie näher erläutern, warum _Rails_ project auf Windows-Hosts ausgeführt werden sollte? Werden Sie das gesamte Projekt an den Endbenutzer versenden? Ob der Benutzer mit der Installation von rails project gut ist, würde ich mit der obligatorischen Einstellung in kinda 'config.rb' für den Pfad gehen, mit dem Standardwert, der auf den Ort gesetzt wird, an dem diese Bibliothek installiert wird" wie du im OP gezeigt hast.) – mudasobwa
@mudasobwa Ich arbeite remote mit Entwicklern zusammen, die Windows-Maschinen verwenden, wo einige nicht in der Lage/willens sind, Cygwin oder ähnliches zu verwenden. Die Verwendung eines 'config.rb' mit fest codierten Dateipfaden würde das Problem der Plattformerkennung nicht beseitigen. – femmestem
Fair genug. Ich meinte nicht hart codierte Wege. Ich meinte, Sie könnten die Mitbearbeiter dazu zwingen, den Inhalt dieser Datei zu ändern oder die env-Variable festzulegen. Schließlich sind sie Entwickler, keine Kunden. Und, IMHO, das ist kein Codepiece, das wirklich poliert werden muss. Die Plattformerkennung ist, wie Sie gezeigt haben, schon viel besser als nichts. – mudasobwa