2016-11-15 77 views
1

我正在使用Apache2和Passenger在Ubuntu服务器上部署Rails应用程序。Rails - PDFkit在生产中不起作用

到目前为止,除了一个问题外,一切都运转良好。

我的应用程序的一部分涉及到从HTML网页生成PDF的。

我使用pdfkit来做到这一点。

gem 'pdfkit' 
gem 'wkhtmltopdf-binary' 

我无法找到我遵循的指示,当我在本地主机上运行应用程序时,我得到了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

没有人有使用PDFkit在生产钢轨一些有实力的经验吗? 并且可以帮助确认我相信问题在于PDFkit未正确预编译?

回答

1

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

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

我把它放在那里由于与pdfkit试图生成PDF时永远挂着一个问题。

我的代码,因为用它代替:

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安装。

我希望这可以帮助别人。