rails tmp 文件夹应该有什么权限 wicked_pdf?

What permissions should have wicked_pdf on the rails tmp folder?

我已经在我的 rails 4 项目上安装了 wicked_pdf。我在 Ubuntu 16 EC2 机器上的 nginx 和 passenger 下 运行。

当我尝试在 'production' 中生成 PDF 时,出现以下错误:

 ActionView::Template::Error (Permission denied @ dir_s_mkdir - /.../tmp/cache):

如果我 chmod -R 777 我的 tmp 文件夹当然可以,但我不想以这种方式修复它。

在搜索时我发现我应该将文件夹 chown 给 www-data 用户;我已经试过了,但没有成功,也许生成 PDF 的过程应该有这个文件夹的权限?

提前致谢

编辑,添加跟踪:

App 17963 stdout: ***************WICKED***************
App 17963 stdout:   Rendered posts/article.pdf.erb within layouts/article_pdf.html.erb (0.9ms)
App 17963 stdout: Completed 500 Internal Server Error in 34ms (ActiveRecord: 6.5ms)
App 17963 stdout: 
App 17963 stdout: ActionView::Template::Error (Permission denied @ dir_s_mkdir - xxx/.../tmp/cache):
App 17963 stdout:     3: <head>
App 17963 stdout:     4:    <title></title>
App 17963 stdout:     5:    <%= stylesheet_link_tag "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" %>
App 17963 stdout:     6:     <%= wicked_pdf_stylesheet_link_tag 'application' %>
App 17963 stdout:     7:     <%= wicked_pdf_stylesheet_link_tag 'social' %>
App 17963 stdout:     8:     <%= wicked_pdf_stylesheet_link_tag 'directories' %>
App 17963 stdout:     9:    <%= wicked_pdf_stylesheet_link_tag 'home' %>
App 17963 stdout:   app/views/layouts/article_pdf.html.erb:6:in `_app_views_layouts_article_pdf_html_erb__3815099653923299167_60691780'
App 17963 stdout:   app/controllers/posts_controller.rb:167:in `block (2 levels) in article'
App 17963 stdout:   app/controllers/posts_controller.rb:164:in `article'
App 17963 stdout: 
App 17963 stdout: 
App 17963 stdout: Processing by ErrorsController#internal_server_error as PDF

编辑 2: 每次我预编译我的资产并重新启动我的 nginx 服务器时都会出现此错误。似乎每次我预编译我的资产时,tmp 文件夹内容都由 root 重新创建。

我认为您应该授予 运行 Passenger 或 sidekiq 用户权限。要找到该用户,您可以使用以下命令:

ps -aux | grep "sidekiq\|Passenger"

编辑(更新根本原因):

根本原因是 wicket_pdf 检测到它应该在生产中预编译资产,资产已经预编译并且它不应该再尝试编译它们。

assets.compile 设置为 true 强制 wicket_pdf 使用预编译的。检查是否应该使用编译资产的代码是 here.