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

时间:2018-01-22 14:11:02

标签: ruby-on-rails nginx passenger wicked-pdf

我在rails 4项目上安装了wicked_pdf。我在我的Ubuntu 16 EC2机器上运行nginx和乘客。

当我尝试在'生产'中生成PDF时,我收到以下错误:

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

当然如果我chmod -R 777我的tmp文件夹它会工作,但我不想以这种方式解决它。

搜索时我发现我应该将文件夹列入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重新创建的。

1 个答案:

答案 0 :(得分:1)

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

ps -aux | grep "sidekiq\|Passenger"

编辑(更新根本原因):

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

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