使用PDFkit gem生成pdf在rails 4上挂起

我可以下载pdf文件:

curl google.com | wkhtmltopdf - test.pdf 

所以这意味着,wkhtmlpdf安装成功了。

但是,当我尝试通过访问http://localhost:3000/contacts/1.pdf生成pdf文件时,它会挂起。 在状态栏中显示: Waiting for localhost...

Rails服务器输出:

 Started GET "/contacts/1.pdf" for 127.0.0.1 at 2013-07-28 21:45:06 +0900 ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" Processing by ContactsController#show as HTML Parameters: {"id"=>"1"} Contact Load (0.3ms) SELECT "contacts".* FROM "contacts" WHERE "contacts"."id" = ? LIMIT 1 [["id", "1"]] Rendered contacts/show.html.erb within layouts/application (1.4ms) Completed 200 OK in 99ms (Views: 57.0ms | ActiveRecord: 0.7ms) 

的Gemfile:

 gem 'pdfkit' 

application.rb中:

 config.middleware.use "PDFKit::Middleware" 

根据PDFKit railscast,这应该足以生成pdf文件,只需添加.pdf


更新:

show.html.erb:

 

Name:

Age:

|

布局/ application.html.erb:

    Pdftest  true %>  true %>       

更新2:

感谢@Arman H帮助我弄清楚我必须为资产指定绝对路径而不是相对路径。 当我删除以下行时,我能够生成PDF文件:

  true %>  true %> 

现在,我无法用绝对路径来替代它。 看来这篇文章就是我所需要的,但我仍然无法弄清楚我的情况会是怎样的。

问题是由stylesheet_link_tagjavascript_include_tag使用相对URL,这通常会导致wkhtmltopdf在运行wkhtmltopdf的同一服务器上加载资源时挂起。

使用资产的绝对URL解决了这个问题。

在Rails的配置中设置asset_host ,这也会影响stylesheet_link_tagjavascript_include_tag

 # Modify asset host config setting in `config/application.rb` # Or create a new initializer: `config/initializers/wkhtmltopdf.rb` config.action_controller.asset_host = "http://mysite.com" # Or you can have different hosts for development (local) and production (CDN): # In `config/environments/development.rb` config.action_controller.asset_host = "http://localhost" # In `config/environments/production.rb` config.action_controller.asset_host = "http://d111111abcdef8.cloudfront.net" 

在development.rb中设置config.action_controller.asset_host = "http://localhost"实际上对我不起作用。 也就是说,PDF生成可以工作,但在呈现HTML时资产不会通过。

我按照这里的方法: http : //jguimont.com/post/2627758108/pdfkit-and-its-middleware-on-heroku

它对我来说就像一个魅力。 希望这有助于某人。 只需在config / intializers中抛出assets.rb就可以了。

我有同样的问题,我的日志显示页面已呈现但是没有生成pdf并且浏览器将挂起。 它最终与操作系统兼容性,缺少图书馆员,gem和依赖关系无关,而是我需要将我的Puma服务器(已设置为1)的最大允许线程数提高到2或更多。 然后生成pdf正常。