使用Pow和Nginx进行开发时,文件上传不能与Rails 4一起使用

 lylmwt 发布于 2023-01-30 03:40

我正在使用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"

1 个回答
  • 问题不在于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_tempuwsgi_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访问和应用程序日志)与符号链接到/logRails应用程序的目录.当您遇到棘手的错误时,它有助于查找其中一个错误.

    2023-01-30 04:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有