在heroku上实现邪恶的pdf的问题
我正在使用本指南在heroku上集成wicked_pdf。 但不知何故它似乎没有用。 我从heroku获得了日志,它说:
Processing PdfController#get_pdf to pdf (for 115.248.175.50 at 2011-02-15 23:54:44) [GET] Parameters: {"format"=>"pdf", "action"=>"get_pdf", "id"=>"1", "controller"=>"pdf"} ***************WICKED*************** Rendering pdf/get_pdf RuntimeError (PDF could not be generated! /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `exec': No such file or directory - /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64 - - (Errno::ENOENT) from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `popen3' from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `fork' from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `popen3' from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `fork' from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `popen3' from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/wicked_pdf.rb:22:in `pdf_from_string' from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:28:in `make_pdf' from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:39:in `make_and_send_pdf' from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:13:in `render' from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/app/controllers/schedule_controller.rb:33:in `get_pdf'
请帮忙。 提前致谢。
编辑:
我在代码中做了一些更改并完成了这个错误,但仍然停留在这里
NoMethodError (undefined method empty? for #)
查看编辑部分,其中“未定义的方法为空?对于#
这意味着你在某个地方使用空? 路径上的函数对象是空的吗? 是字符串而不是路径的函数。
尝试找出使用路径Object的位置并在该对象上使用to_s。
试试看。
如何让WickedPdf gem在Heroku上运行
(见下面引用的url)
- 在Rails应用程序的根目录中创建一个名为
bin
的文件夹。 - 下载并将
wkhtmltopdf
二进制文件的0.9.9版提取到bin
文件夹。 您将需要开发系统的版本和Heroku的AMD64版本。 不要添加到您的git仓库。 - 为
bin
文件夹中的每个二进制文件设置执行权限,例如chmod +x bin/wkhtmltopdf-amd64
- 现在
git add bin
- 将
wicked_pdf
添加到您的Gemfile
并bundle install
。 不需要其他wkhtmltopdfgem。 - 在
config/initializers
文件夹中创建一个名为wicked_pdf.rb
文件,其源代码如下所示。 -
git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
-
git push heroku
您的Rails项目现在已配置为Heroku。 从这里,添加PDF文件的程序逻辑。
** config / initializers / wicked_pdf.rb **
if Rails.env.production? wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64" else # Linux (check your processor for Intel x86 or AMD x64) # wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64" # wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-i386" # OS X wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-0.9.9-OS-X.i386" # Windows # wkhtmltopdf_path = 'C:\Program Files/wkhtmltopdf/wkhtmltopdf.exe' end WickedPdf.config = { exe_path: wkhtmltopdf_path, wkhtmltopdf: wkhtmltopdf_path }
我是如何得出这个结论的:
对于初学者来说,网上有几篇关于wkhtmltopdf
, wicked_pdf
gem和Heroku
误导性文章。 最新版本的wkhtmltopdf
(10.0+)也存在导致执行挂起的问题。
最后,在某些时候, WickedPdf
的配置变量名必须有变化,因为有几篇文章引用了:exe_path
而其他文章引用了:wkhtmltopdf
。 甚至WickedPdf的GitHub文档也会在每个变量之间交替出现。
我的解决方案你不需要从源代码编译wkhtmltopdf
。 您不需要从Homebrew安装wkhtmltopdf
。 如果你真的想要brew install wkhtmltopdf
我提供了解决方案。 您也不需要在项目中添加任何’wkhtmltopdf’ 辅助gem。 我尝试了wkhtmltopdf
, wkhtmltopdf-heroku
, wkhtmltopdf-engineyard
, wkhtmltopdf-binary
gems和GitHub repos。 在当地工作得很好。 Heroku没有运气。
从Heroku上的Rails控制台:我通过运行RUBY_PLATFORM
来调查运行Heroku服务器的CPU,这产生了"x86_64-linux"
。 我还通过发出Dir.entries('bin')
来查看Heroku上的bin
文件夹,看看那里有哪些文件。 我注意到我测试的一些wkhtmltopdf
gem将它们的可执行文件放在这个文件夹中。 线索! 我运行了WickedPdf.new.pdf_from_string('Hello')
来查看输出错误并测试各种WickedPdf配置。
然后,在@ barlow的配置PDFKit
的答案中,有一个子笔记给出了最终的关键。 在提交给Git之前,你必须给Unix执行权限wkhtmltopdf
二进制文件。 答对了!
引用:
- 官方wkhtmltopdf遗留静态二进制文件http://wkhtmltopdf.org/old-downloads.html
- wicked_pdf https://github.com/mileszs/wicked_pdf
- Barlow的PDFKit.config https://stackoverflow.com/a/5098984/307308
- 如何使用Homebrew安装wkhtmltopdf`https://psackoverflow.com/a/14043085/307308
在撰写本文时:
- 铁轨(3.2.13)
- wicked_pdf(0.9.6)
- wkhtmltopdf(0.9.9)
2015年12月2日修订
dscout开发了一个包含我的答案概念的gem。 如果您的Heroku实例支持buildpack,我建议使用gem。
2015年3月27日修订
另一个与Heroku(和Linux AMD64操作系统) 配合使用的gem wkhtmltopdf-heroku它会自动检测是否安装了pdfkit,wicked_pdf和wisepdf gems。
如果您将wkhtmltopdf的本地副本添加到您的仓库,您可以在初始化程序中指向它。
PDFKit.configure do |config| config.wkhtmltopdf = "#{RAILS_ROOT}/lib/wkhtmltopdf" end
记得在你的回购之前chmod + x你的wkhtmltopdf副本 – git添加它
希望这可以帮助。
正在寻找wicked_pdf二进制文件: /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64
并不存在,将二进制文件放在应用程序的文件夹中,然后将文件config/initializers/wicked_pdf.rb
为包括:
:exe_path => "#{Rails.root}/path/to/wkhtmltopdf-amd64"
如果wicked_pdf创建文件,你可能遇到的另一个问题是Heroku文件系统只被读取,所以除非你找到一种方法告诉wicked_pdf在tmp目录中创建pdfs,否则你可能无法使用它。
- Heroku:使用回形针运行imagemagick
- GET请求(无JSON)无法使用Rails 4.1上的Devise 3.2.4validationCSRF令牌的真实性
- heroku运行rake db:迁移错误
- 推送到Heroku时:应用程序中发生错误,无法提供您的页面。 请稍后重试
- Rails,Heroku和Resque:长时间运行的背景作业优化
- 使用Paperclip和Padrino
- Heroku记录FATAL SignalException:SIGTERM
- 如何让Heroku识别子目录(而不是root)中的yarn.lock或package.json
- 使用Postgresql后端在Heroku上的Rails应用程序中使用COPY FROM