我正在构建一个应用程序,它使用用户创建的旅行地图创建 PDF 文档。它有两个阶段:
- 个性化——用户选择兴趣点。
- 完成 - 用户输入他们的电子邮件地址,我们生成 PDF 地图并通过发送带有下载链接的电子邮件来完成该过程。
我对流程的第二阶段有疑问。请求生成 PDF 时出现错误。
在日志中:
app[worker.1]: Starting to finalize PDF no #3384
app[worker.1]: Generating pdf url:/pdfs/new.json?id=3384&token=abcdeyd
app[web.2]: Started GET "/pdfs/new.json?id=3384&token=abcdeyd"
几秒钟后,我得到:
heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/pdfs/new.json?id=3384&token=abcdeyd" host= fwd= dyno=web.2 queue=0ms wait=0ms connect=1ms service=30000ms status=503 bytes=0
接着:
[Worker(host:pid:2)] Trip#finalize_without_delay! failed with MultiJson::DecodeError: 795: unexpected token at '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
app[worker.1]: <html>
app[worker.1]: <head>
app[worker.1]: <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
app[worker.1]: <style type="text/css">
app[worker.1]: html, body, iframe { margin: 0; padding: 0; height: 100%; }
app[worker.1]: iframe { display: block; width: 100%; border: none; }
app[worker.1]: </style>
app[worker.1]: <title>Application Error</title></head>
app[worker.1]: </head>
app[worker.1]: <body>
app[worker.1]: <iframe src="//s3.amazonaws.com/heroku_pages/error.html">
app[worker.1]: <p>Application Error</p>
app[worker.1]: </iframe>
app[worker.1]: </body>
app[worker.1]: </html>' - 0 failed attempts
从用户的角度来看,它是这样的:
app[web.1]: Started GET "/pdfs/3384"
app[web.1]: OpenURI::HTTPError (403 Forbidden):
app[web.1]: app/controllers/pdfs_controller.rb:52:in `show'
最奇怪的是,当我在大约 30 到 40 分钟后实际尝试下载 PDF 时,一切顺利,我将其下载到我的电脑上。
app[web.1]: cache: [GET /pdfs/3384] miss
app[web.1]: Processing by PdfsController#show as HTML
app[web.1]: Parameters: {"id"=>"3384"}
app[web.1]: Completed 200 OK in 2101ms (Views: 0.9ms | ActiveRecord: 7.4ms | Solr: 0.0ms)
heroku[router]: at=info method=GET path=/pdfs/3384 dyno=web.1 queue=0 wait=1ms connect=1ms service=4220ms status=200 bytes=13825239
我会非常感谢任何建议。请问有什么不清楚的地方。问候