Gemfile
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary', '~> 0.12.5'
Controller:
def pdf_list
@lists = Domain.select(:domain_name, :ip_address, :priority)
respond_to do |format|
format.pdf do
render pdf: "pdf",
margin: {:top => 20, :bottom => 18},
page_size: 'A4',
template: 'domains/list.pdf.erb',
disposition: 'inline',
footer: {html: {template: 'domains/footer.pdf.erb'}}
end
end
end
我已经在rails中使用wicked_pdf将html文件生成为pdf文件。
无需渲染页脚,我可以生成300多页的pdf。
如果我在页脚中包含内容pdf文件,则使用wicked_pdf生成的页面不超过200页。
错误:
DomainListsController#pdf_list中的RuntimeError未能执行:[“ / usr / local / bin / wkhtmltopdf”,“ --page-size”,“ A4”,“ --margin-top”,“ 20”,“-margin-bottom”,“ 18”,“-footer-html”,“ file:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_footer_pdf20191206-1975-o5qou2.html”,“ file:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_pdf20191206-1975-16o6tkk.html”,“ /var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_pdf_genic_file20191206-1975-1u66u16.pdf”]错误:无法生成PDF!命令错误:正在加载页面(1/6)[>] 0%[======>] 10%[===============================]] 50 %[==============================>> 50%
在日志文件中:
错误:加载失败文件:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_footer_pdf20191206-1975-o5qou2.html?page = 274&section = FULL资产报告&sitepage = 274&title =全部资产REPORT&subsection =&frompage = 1&subsubsection =&isodate = 2019-12-06&topage = 275&doctitle =完整资产REPORT&sitepages = 275&webpage = file:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_pdf20191206-1975-16o6tkk.html&time=11:07AM&date = 06/12/19,网络状态代码为201,http状态代码为0-打开错误//var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_footer_pdf20191206-1975-o5qou2.html:打开的文件太多错误:加载页面失败文件:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_footer_pdf20191206-1975-o5qou2.html?page = 274&section = FULL资产报告&sitepage = 274&title =全部资产REPORT&subsection =&frompage = 1&subsubsection =&isodate = 2019-12-06&topage = 275&doctitle =完整资产REPORT&sitepages = 275&webpage = file:////var/folders/v6/_516wg4d5rsdrhlb5sn82fbc0000gp/T/wicked_pdf20191206-1975-16o6tkk.html&time=11:07AM&date = 06/12/19(有时它可以忽略该错误与--load-error-handling忽略)
错误消息为我们提供了一个线索:
打开的文件太多
[wicked_pdf最有可能从多个文件片段创建完整的文档。在Linux系统上,可以同时打开多少个文件存在软性和硬性限制,并且看来已达到此限制。因此出现错误。
要查看系统设置的当前软限制,可以使用ulimit -n
:
> ulimit -n
1024
要查看用于增加软限制的可用净空,您可以检查硬限制:
> ulimit -H -n
1048576
要增加当前shell的软限制,您可以执行以下操作:
> ulimit -n 5000
> ulimit -n
5000
现在运行您的Rails服务器从此shell,然后重试。
但是我的建议是使用wicked_pdf提出一个问题,因为这似乎是一个基本的实现问题,可以在gem的代码中解决。
有关文件限制的更多信息,请参见此处:https://ultra-technology.org/linux_for_beginners/too-many-open-files-in-linux/