2011-09-23 43 views
2

我正在尝试关注此tutorialrails 3和PDFkit

当我将.pdf添加到我的网址时,它什么都不做。我的控制器有:

respond_to :html, :pdf. 

我的mime类型已被声明。

我想这太:

respond_to do |format| 
    format.html 
    format.pdf { 
    html = render_to_string(:layout => false , :action => "www.google.fr") 
    kit = PDFKit.new(html) 
    send_data(kit.to_pdf, :filename => "candidats.pdf", :type => 'application/pdf') 
    return # to avoid double render call 
    } 
end 

,但它不工作,我不明白的错误。我的浏览器一直在等待localhost,但没有任何反应。

那么我该如何尝试使用pdfkit呢?

编辑2:

根据我的rails的日志,rails成功地呈现了HTML。我在.log中看到了这一点,rails不会将它发送到webrick或我的浏览器。而且我的浏览器一直在等待,并且没有发生任何事情。我在这里只有很少的照片。

编辑3:我的webrick服务器似乎无法响应其他请求,一旦他开始获得我的url的.pdf版本,有什么想法?

编辑4:

我用的导轨3.1,wkhtmltopdf 0.9.5(Windows安装程序)和pdfkit 0.5.2

+0

抱歉,无法帮助您解决问题,但感谢您向我推荐pdfkit!一直以为虾对它来说是'好'的。 –

+0

您发布的代码与您链接的教程中显示的代码之间存在相当大的不匹配。你确定你正在学习这个教程吗? –

回答

6

我发现了一种更好的方法来访问我的.pdf网址,即使在开发模式下。

# Enable threaded mode 
config.threadsafe! 

# Code is not reloaded between requests 
#config.cache_classes = true 

Config.cache_classes是一个评论,因为我有一些问题,当它不是。即使使用rails 3.1,这种pdfkit的工作方式也很奇妙。但是,您不会在请求之间重新加载代码。

这不是一个真正的问题,因为你首先在你的html上工作,并且你切换配置,以便检查pdf结果。这样您就不必担心生产数据库。

+0

将此设置置于开发模式可以完成这项工作,但是如何在生产环境中使用它(您是否使用了heroku?)。如果我在生产中设置了“config.threadsafe!”标志,我的工作就会超时。 – Tonys

+0

我没有使用heroku。它在生产中完美地适用于我。 (但我在当地仍然)。这可能会帮助你:http://jguimont.com/post/2627758108/pdfkit-and-its-middleware-on-heroku。我没有尝试过。 – perello

3

由于另一个堆栈溢出的答案我的解决方案的一部分。

这工作:

html = '<html><body>Toto de combats</body></html>' 
@pdf = PDFKit.new(html) 

send_data @pdf.to_pdf, :filename => "whatever.pdf", 
        :type => "application/pdf", 
        :disposition => "attachement" 

可以更换attachement通过inline,所以PDF显示在您的浏览器。

在我谈到的堆栈溢出答案(我不记得链接)时,.to_pdf丢失,但是是强制性的。否则,PDF阅读器无法识别它。

我试图让这个工作与.pdf网址。

编辑3:

我的.pdf网址问题已解决。与轨道3.1的知名问题,但谷歌无法找到它们。

解释:explanation

解决方法(还没有tryied)。 workaround