我有一个Rails 3应用程序,我在本地开发,并在亚马逊弹性魔豆生产部署。 有一个在我的应用程序的几个地方,图像可以通过HTML形式上传。 上传后,我然后将文件发送到S3存储。 我有这个工作流程而本地开发没有问题,但在生产中,我发现了在上传时500内部服务器错误响应(我相当肯定它与S3任何通信之前的)。
我ssh'ed到我的EC2实例发现/var/app/support/logs/passenger.log错误的痕迹。 下面是的上传过程中产生的线。
2013年3月30日○点58分52秒[暴] 1723#0:* 196227打开() “/tmp/passenger-standalone.1645/client_body_temp/0000000014” 失败(2:没有这样的文件或目录),客户端:IP_ADDRESS ,服务器:_,请求: “POST /管理/用户/ 1 HTTP / 1.1”,主机: “www.my_domain.com”,引荐:“ https://www.my_domain.com/admin/users/1/edit “
有没有人有任何智慧的话,为什么我无法从我的Rails文件上传到弹性魔豆?
在此先感谢您的帮助!
经过一番研究,我相信这个问题是一个日常的cronjob(/etc/cron.daily/tmpwatch)是消除乘客的独立。*目录中的文件上传的关键。
我能得到上传通过重新启动应用服务器再次合作。 对于更长期的修复,我更新了tmpwatch脚本排除模式“的/ tmp /乘客*”(见下文)。
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/passenger*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
fi
done
有另一种解决方案,任何人都已经发现这个问题? 我不是一个系统管理员的人(这是一个很大的原因,我选择了使用弹性魔豆),所以我宁愿不如果在所有可能的EC2实例破解 - 尤其是当我的应用规模和多个实例催生。
希望固定在下一版本:)
http://code.google.com/p/phusion-passenger/issues/detail?id=654
你有没有考虑直接上传图片到代替s3的? 上传到弹性魔豆服务器那种违背事物的精神(文件删除即可,如果情况消失,下一个请求可以通过不同的实例接收等)。 我不是一个SYS管理员家伙要么和我使用的是弹性魔豆出于同样的原因。
基本上我想说,通过移动直接上传到S3,你应该能够让您的服务器服务,您的数据库基础数据和文件店中店你的文件。 然后,希望你可以从这个无稽之谈免疫:)