2015-09-07 117 views
0

我正在使用pdfkit gem,它使用wkhtmltopdf-binary gem中的wkhtmltopdf進行開發。爲什麼不能打包器在服務器上找到wkhtmltopdf

在服務器pdfkit失敗,錯誤

undefined method `chomp' for nil:NilClass 

shared/bundle/ruby/2.1.0/gems/pdfkit-0.8.2/lib/pdfkit/configuration.rb:22:in `wkhtmltopdf' 

失敗是

def wkhtmltopdf 
    @wkhtmltopdf ||= (defined?(Bundler::GemfileError) && File.exists?('Gemfile') ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp 
end 

一些調試之後,該方法似乎`束EXEC其中wkhtmltopdf '從這個方法調用時返回空白。

當從應用程序根目錄的命令行稱它給了

/var/www/<app>/shared/bundle/ruby/2.1.0/bin/wkhtmltopdf 

我試圖從初始化初始化@wkhtmltopdf的值如下

PDFKit.configure do |config| 
    if Rails.env.production? 
    config.wkhtmltopdf = "/var/www/<app>/shared/bundle/ruby/2.1.0/bin/wkhtmltopdf" 
    end 
    config.default_options = { 
    :page_size => 'A4', 
    } 
end 

但我仍然得到同樣的錯誤。即它仍然試圖運行'which'命令並且失敗。

回答

0

bundle exec which wkhtmltopdf返回nil,這是導致此錯誤。

有一個快速的解決是重新定義方法在initializer

require 'pdfkit' 
class PDFKit 
    class Configuration 
    def wkhtmltopdf 
     @wkhtmltopdf ||= `which wkhtmltopdf`.chomp 
    end 
    end 
end 

你可以看看形式here

+0

做得好爲察覺此解決辦法。我必須硬編碼路徑,而不是使用'which wkhtmltopdf',因爲這也從Ruby代碼返回nil。 (儘管在命令行上工作得很好)。我想了解爲什麼會發生這種情況... – giorgio

相關問題