我正在使用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, like 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错误在日志中没有提及轨500错误没有生产日志记录 ,Rails的3.2.13,500错误在发展,没有日志 和如何正确诊断500错误(Rails的,客运,Nginx的, Postgres的)
但这些都是一次性错误,似乎与我所面临的问题无关.如果有人能指出我正确的方向,那将是很棒的.
更新1
来自routes.rb的相关行
post '/settings/avatar/update', to: '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 [crit] 8787#0: *85813 open() "/usr/local/var/run/nginx/client_body_temp/0000000010" failed (13: Permission denied), client: 127.0.0.1, server: *.dev, request: "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 =权限被拒绝.
Nginx使用该client_body_temp_path
指令指定临时存储来自用户请求的上载文件的位置.Homebrew默认设置为/usr/local/var/run/nginx
.此文件夹还包含fastcgi_temp
,proxy_temp
,scgi_temp
和uwsgi_temp
我.Nginx工作进程与用户nobody
一起运行,他们无法访问这些文件夹.我向nobody
用户说明了所有这些文件夹,但这没有帮助.
最后,我做到了
client_body_temp_path /tmp/nginx/;
在我的HTTP模块内部nginx.conf
使其工作.
做ls -l
节目
drwx------ 2 nobody wheel 68 Feb 1 14:44 nginx
我不确定为什么这在内部工作/tmp
而不是在原件内部/var/run/nginx
.我相信当我使用其他临时文件夹或生产时,我将面临类似的问题.如果发生这种情况,将更新此线程.
我建议将其他相关日志(如nginx访问和错误日志,pow访问和应用程序日志)与符号链接到/log
Rails应用程序的目录.当您遇到棘手的错误时,它有助于查找其中一个错误.