我正在使用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"
给了我一个问题
在我删除该代码之前,我根本无法加载我的应用程序索引页面。我在这里看到了一个例子:https://gist.github.com/francescognarra/9665736
并用以下内容替换上述代码:
PDFKit.configure do |config|
config.root_url = "file://#{Rails.root.join('public')}/"
end
我现在可以启动应用程序并浏览我的所有页面。但是,我无法创建新的pdf或查看任何以前生成的pdf。如果我尝试获取以下错误日志,我不明白。
有没有人在生产中使用带有rails的PDFkit有一些丰富的经验? 并且可以帮助确认我的信念,即问题在于PDFkit没有正确预编译?
答案 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安装。
我希望这有助于其他人。