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.
我已经在我的 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.