为什么cant bundler在服务器

时间:2015-09-07 01:26:02

标签: ruby-on-rails ruby bundler wkhtmltopdf pdfkit

我正在使用pdfkit gem,它正在使用wkhtmltopdf-binary gem中的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

但我仍然得到同样的错误。即它仍然试图运行&#39;哪个&#39;命令并以空白失败。

1 个答案:

答案 0 :(得分:0)

bundle exec which wkhtmltopdf会返回nil,这会导致此错误。

快速解决方法是在initializer

中重新定义方法
require 'pdfkit'
class PDFKit
  class Configuration
    def wkhtmltopdf
      @wkhtmltopdf ||= `which wkhtmltopdf`.chomp
    end
  end
end

您可以查看here

表单