2011-04-06 228 views
8

我遇到了使用xsendfile和我的Rails 3应用程序的问题。带符号链接的mod_xsendfile

我正在使用capistrano管理部署,并且在每个版本中都有一个共享/资产目录的符号链接(例如/ var/www/site/releases/1234/assets =>/var/www/site /共享/资产)。问题是XSendFile似乎没有遵循符号链接。在我的Apache日志,我看到下面的错误:

The given path was above the root path: xsendfile: unable to find file: /var/www/site/releases/20110406205607/assets/pdfs/2/original/test.pdf 

我已在XSendFilePath配置设置为

XSendFilePath /var/www/site/shared/assets 

如果我切换config来:

XSendFilePath /var/www/site/releases 

那么一切工作正常。所以我有几个问题:

1)有没有办法使XSendFilePath遵循符号链接?

2)将XSendFilePath设置为我的发行版目录是否存在安全风险?换句话说,我是否可以打开所有目录的访问权限?

task :storage_link, :except => { :no_release => true } do 
    run "ln -nFs #{deploy_to}/shared/assets #{latest_release}/assets" 
end 

这使得XSendFilePath看到该链接为/var/www/site/current/assets这使它的根路径内:

回答

7

您是否使用类似这样的after "deploy:finalize_update"任务创建链接。

还要确保运行您的应用的用户拥有/ var/www/site/shared/assets的写权限。

+0

感谢您的回答。我已经从这个项目中走了出来,但你的答案肯定是有道理的。 – bostonou 2011-08-12 19:16:17

+1

直到使用'Pathname#realdirpath'解析符号链接时,这对我们才有用。 – 2013-05-03 21:33:10

+0

它不适用于我,即使使用'路径名#realdirpath' :( – wrzasa 2015-03-04 14:48:05