我有一个Rails 3应用程序,它有一个附件模型并使用Paperclip gem。一切都在开发环境中正常工作,但在生产服务器上我们无法访问任何上传的图像。图像位于正确的文件夹中,但是当我尝试在浏览器上访问它们时,我只需获得404页面。
上传文件夹位于公共文件夹下,名为“uploads”
我可以访问:“app_url / uploads / test.html”我手动创建它以查看它是否有效
但我无法访问:“app_url / uploads / test.jpg”,我通过Paperclip在应用程序中上传。
我猜这与服务器配置有关,但我不是专家,可能需要帮助。
由于
更新
我刚刚意识到上传的文件属于“nobody”,当我手动将所有者更改为“root”时,它似乎工作正常。所以我需要找到一种方法告诉Paperclip使文件属于“root”
答案 0 :(得分:0)
让Web应用程序能够以root身份编写文件并不是一个好主意。文件权限来自编写文件的进程。如果你正在使用Passenger,那就是用户切换的概念:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerDefaultUser
在启动应用程序后,Passenger会尝试找出哪些用户拥有这些文件,并尝试将其应用程序进程切换到该用户。如果失败,“nobody”是默认值。
检查文件级别的应用程序权限。您的服务器上每个应用程序应该有一个用户帐户。应用程序(公共目录上方的目录和内容)应归该用户所有。公开的文件应该是其他人可读的,因此网络服务器也可以接收它们。
您是否正在使用Capistrano进行部署?