2016-03-19 16 views
1

Uygulamada depolanan bilgilere göre PDF formlarını otomatik olarak doldurmak için PDF Tool Kit ('pdf-form' gem) kullanan bir açık kaynak Rails 4 projesi üzerinde çalışıyorum veri tabanı. PDFtk, ikili dosyaların kurulmasını gerektirir ve örneklendirilmiş PDFtk modeli, ikili dosyalara bir yol gerektirir. Yolun dinamik olması gerekiyor, bu yüzden Heroku, Mac OS X ve Windows üzerinde çalışacak. Bir 'nix makinesindeki yolu' hangi 'komutuyla bulabilirim. Ancak, Windows 'hangi' kullanmaz, 'nerede' kullanır.Platformun CLI komutuna yanıt verip vermediğini anlamak için Ruby'yi kullanın

Platformun bir komuta yanıt verip vermediğini saptamanın bir yolu var mı, eğer öyleyse, komutu çalıştır?

En iyi denemem, platformu RbConfig ile algılamaktır (aşağıya bakın). Bununla birlikte, bazı Windows platformları (ör. Cygwin) * nix komutlarına cevap verir. Bir Mac kullanıcısı olarak, Windows için her platforma aşina değilim.

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 
+0

Windows ana bilgisayarlarında çalıştırılmak için neden _Rails_ projesine ihtiyacınız olduğunu açıklayabilir misiniz? Tüm projeyi son kullanıcıya gönderecek misin? Kullanıcının raylar projesini kurmakla iyi olup olmadığı, kinda 'config.rb' içinde zorunlu ayarlarla gidip, bu kütüphanenin kutudan çıktığı yere ayarlanmış varsayılan değerle giderdim. OP'de görüntülediğiniz gibi.) – mudasobwa

+0

@mudasobwa Bazıları Cygwin'i veya benzerlerini kullanamayacak/kullanamayacağı Windows makineleri kullanan geliştiricilerle uzaktan işbirliği yapıyorum. Sabit kodlu dosya yollarına sahip 'config.rb 'kullanılması, platform algılama sorununu ortadan kaldırmaz. – femmestem

+0

Yeterince adil. Hardcoded yolları demek istemedim. Bu dosyanın içeriğini değiştirmek veya env değişkenini ayarlamak için ortak çalışanlarınızı zorlayabilirsiniz. Sonuçta, onlar müşteri değil, geliştiricilerdir. Ve IMHO, bu gerçekten cilalanması gereken bir kod parçası değil. Gösterdiğiniz gibi platform algılama zaten hiçbir şeyden daha iyi. – mudasobwa

cevap

1

where komut Eğer JRuby kullanırsanız, RbConfig::CONFIG['arch'] komut size java ile ilgili tanımlayıcı verecek en az Windows 7

beri mevcut olmalıdır. Buna göre question yerine host_os'u kullanabilirsiniz (Windows 7'de jruby 9000 ile test edilmiştir).

stdlib mkmf modülü az bilinen bir yardımcı işlevi vardır
def local_path 
    os = RbConfig::CONFIG['host_os'] 
    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 
    unless $?.success? 
    log.error "failure to find the pdfkit excutable path" 
    puts "Please set the PDFTK_PATH environment variable to point to the pdftkkit executable" 
    path = "" # maybe throw an exception here 
    end 
    path 
end 
+0

Her ikisi de kombinasyon halinde kullanarak sona erdi çünkü sizin ve 10dot arasında ** bir ** doğru cevap kabul etmek zordur. 10dot'un cevabını doğru olarak kabul ettim, çünkü başarmaya çalıştığım şeylere özgüydi. Bununla birlikte, cevabınızı genel olarak, çevrelerini doğru bir şekilde yapılandırmak için sorumluluğu diğer devlere nasıl kaydırılacağına ve iyi hata iletileriyle uygulamaya nasıl yönlendirileceğine dair iyi bir tavsiyede bulunmaktayım. – femmestem