我在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重新创建的。
答案 0 :(得分:1)
我认为您应该为运行Passenger或sidekiq的用户授予权限。要找到该用户,您可以使用以下命令:
ps -aux | grep "sidekiq\|Passenger"
编辑(更新根本原因):
根本原因是wicket_pdf检测到它应该在生产中预编译资产,资产已经预编译,它不应该再尝试编译它们。
将assets.compile
设置为true
强制wicket_pdf以使用预编译的。检查是否应使用已编译资产的代码是here。