ruby-on-rails – 使用Pow和Nginx开发的文件上传不支持Rails 4

我正在使用Pow和Nginx来开发我的Rails 4应用程序.一个简单的文件上传返回500错误,请求没有到达Rails控制器.我认为是这种情况,因为在Rails日志中没有提到请求.没有提到错误,我不确定这里出了什么问题.

我从一个Ajax文件上传开始,但用一个简单的表单替换它也没有用.

试过这个

然后去了这个

目前的avatar.html.erb

<%= form_for @user, html: { multipart: true }, method: "post", url: '/settings/avatar/update', class: "", id: "update_avatar" do |f| %>
  <%= f.file_field :avatar, class: 'js-upload-photo-button js-change-avatar-btn', accept: 'image/png,image/gif,image/jpeg,image/jpg' %>
    <%= f.submit "Upload" %>
<% end %>

在Chrome中请求标头

扩展请求标题部分

nginx.log

127.0.0.1 – – [01 / Feb / 2014:11:28:26 0530]“POST / settings / avatar / update HTTP / 1.1”500 643“https://allotrop.dev/settings/avatar”“Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_8_4)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 32.0.1700.77 Safari / 537.36“

pow access.log

[Sat Feb 01 2014 11:28:26 GMT 0530(IST)] INFO [127.0.0.1] GET allotrop.dev /500.html

还有其他问题,关于Rails返回500错误,在日志rails 500 error no production log entry中没有提及
,Rails 3.2.13, 500 error in development with no log
How to properly diagnose a 500 error (Rails, Passenger, Nginx, Postgres)

但这些都是一次性错误,似乎与我所面临的问题无关.如果有人能指出我正确的方向,那将是很棒的.

更新1

来自routes.rb的相关行

发布’/ settings / avatar / update’,至:’settings#update_avatar’

更新2

找到我的nginx错误日志.顺便说一句,如果您使用的是Homebrew,则位于/usr/local/Cellar/nginx/1.4.0/logs/error.log

nginx的/ error.log中

2014/02/01 13:05:54 [暴击] 8787#0:* 85813 open()“/usr/local/var / run / nginx / client_body_temp / 0000000010”失败(13:权限被拒绝),客户端:127.0. 0.1,服务器:* .dev,请求:“POST / settings / avatar / update HTTP / 1.1”,host:“allotrop.dev”,referrer:“https://allotrop.dev/settings/avatar”

最佳答案
问题不在于Rails,而在于Nginx,这在nginx error.log中非常明显.这个问题帮助我理解了我正在处理的问题 – Rails 3 + carrierwave + nginx = permission denied.

Nginx使用client_body_temp_path directive指定临时存储来自用户请求的上载文件的位置. Homebrew默认将它设置为/usr/local/var / run / nginx.这个文件夹还包含fastcgi_temp,proxy_temp,scgi_temp和uwsgi_temp. Nginx工作进程与用户nobody一起运行,他们无法访问这些文件夹.我把所有这些文件夹都给了nobody用户,但这并没有帮助.

最后,我做到了

client_body_temp_path / tmp / nginx /;在我的nginx.conf的HTTP模块中使其工作.

做一个ls -l显示

drwx —— 2无人轮68 2月1日14:44 nginx

我不知道为什么这在/ tmp内部工作,而不是在原始的/ var / run / nginx中.我相信当我使用其他临时文件夹或生产时,我将面临类似的问题.如果发生这种情况,将更新此线程.

我建议将其他相关日志(如nginx访问和错误日​​志,pow访问和应用程序日志)与符号链接到Rails应用程序的/ log目录.当您遇到棘手的错误时,它有助于查找其中一个错误.

转载注明原文:ruby-on-rails – 使用Pow和Nginx开发的文件上传不支持Rails 4 - 代码日志