Rails - PDFkit无法在生产中使用

时间:2016-11-15 04:35:37

标签: ruby-on-rails pdf asset-pipeline pdfkit

我正在使用Apache2和Passenger在Ubuntu服务器上部署我的rails应用程序。

到目前为止,除了一个问题外,一切都正常运行。

我的部分应用涉及从html网页生成pdf。

我正在使用pdfkit来执行此操作。

gem 'pdfkit'
gem 'wkhtmltopdf-binary'

当我在localhost上运行应用程序时,我找不到我用来获取pdf工具包的说明。

但这是一个很好的例子:https://github.com/pdfkit/pdfkit

我遇到的问题是我相信pdfkit没有预先编译我的资产。

application.rb里面我有:

require 'pdfkit'
module RailsPdf
  class Application < Rails::Application
      config.middleware.use PDFKit::Middleware
  end
end

我的config/initializers/assets.rb内有

ActionController::Base.asset_host = Proc.new { |source, request|
  if request.env["REQUEST_PATH"].include? ".pdf"
    "file://#{Rails.root.join('public')}"
  else
    "#{request.protocol}#{request.host_with_port}"
  end
}

我找不到我从哪里得到它或为什么它在那里。但它在线if request.env["REQUEST_PATH"].include? ".pdf"给了我一个问题 enter image description here

在我删除该代码之前,我根本无法加载我的应用程序索引页面。我在这里看到了一个例子:https://gist.github.com/francescognarra/9665736

并用以下内容替换上述代码:

PDFKit.configure do |config|
  config.root_url = "file://#{Rails.root.join('public')}/"
end

我现在可以启动应用程序并浏览我的所有页面。但是,我无法创建新的pdf或查看任何以前生成的pdf。如果我尝试获取以下错误日志,我不明白。

enter image description here

有没有人在生产中使用带有rails的PDFkit有一些丰富的经验? 并且可以帮助确认我的信念,即问题在于PDFkit没有正确预编译?

1 个答案:

答案 0 :(得分:1)

我发现assets.rb中的原始代码来自哪里。

我从这里得到了代码:http://jguimont.com/post/2627758108/pdfkit-and-its-middleware-on-heroku

我把它放在那里是因为在尝试生成pdf时pdfkit永远会挂起来。

我用以下代码替换它:

PDFKit.configure do |config|
  config.root_url = "file://#{Rails.root.join('public')}/"
end

工作得很好。

我仍然不确定我发布的最后一张图片中的错误是什么。

我尝试生成另一个pdf以再次看到错误并得到明确错误:

PDFKit::NoExecutableError (No wkhtmltopdf executable found at /usr/local/bin/wkhtmltopdf
>> Please install wkhtmltopdf - https://github.com/pdfkit/PDFKit/wiki/Installing-WKHTMLTOPDF):

我遵循了这些命令

sudo add-apt-repository ppa:ecometrica/servers
sudo apt-get update
sudo apt-get install wkhtmltopdf

但这并没有解决问题。所以我看到另一篇帖子说gem install wkhtmltopdf-binary这就是最终解决了这个问题的帖子。

我仍然不确定为什么我必须运行该命令,即使我已将其设置为从我的Gemfile安装。

我希望这有助于其他人。