我有以下环境:
nginx
,passenger
,ruby 1.9.2
,ror 3.*
,postgresql
(db
不在游戏中这里)/var/www/
(示例文件夹)我的机架用户为www-data
(nginx
用户)
www-data 21977 0.1 7.2 53324 44420? Sl Dec01 2:21机架:/ var / www /
www-data 1187 0.0 0.4 10620 2468? S Nov24 2:47 nginx:工人流程
我的文件夹/var/www/public
属于www-data
,位于755
drwxr-xr-x 7 www-data www-data 4096 2011-12-02 16:13 public
我收到以下错误(相关部分):
Errno::EACCES in AnswerLinesController#export_csv
Permission denied - public/survey_70_result_csv.csv
app/controllers/answer_lines_controller.rb:647:in `initialize'
app/controllers/answer_lines_controller.rb:647:in `open'
app/controllers/answer_lines_controller.rb:647:in `export_csv'
然后我将文件夹/public
转为775
,结果相同。
然后我将文件夹/public
转为777
,正常工作!
为了好玩,我尝试将我的文件夹/public
再次转换为755
。它正在发挥作用。
www-data
?)755
中不起作用,然后它在777
中起作用,然后最终在755
中起作用?是谁造成了麻烦?文件系统层或Ruby的写入磁盘模块会混淆吗?或者它是Ruby中的错误?
答案 0 :(得分:1)
config/environment.rb
(对于Rails应用程序)或config.ru
(对于Rack应用程序)拥有的用户下运行,除非已在配置中被覆盖。
您可以在http://modrails.com/documentation/Users%20guide%20Nginx.html#user_switching (例如,如果删除目录的读取权限,但保留文件,用户将无法列出目录中的文件,但如果他知道完整的文件名,则仍然可以访问该文件)
答案 1 :(得分:0)
为了记录,Jimmy在user_switching上是正确的。它基本上是一个用户权限问题(正如我想的那样),但无法抓住它。
事情是:
从Phusion-Passenger documentation关于默认用户值:“默认值为nobody。”
这解释了为什么我必须将我的公共/文件夹访问设置为777和775无效。
我通过添加服务器{}块修改了我的nginx配置:
passenger_user www-data;
然后重新启动整个事情,将我的公共/文件夹权限设置为755,然后一切正常。