2011-04-06 16 views
8

Tengo un problema al usar xsendfile con mi aplicación Rails 3.mod_xsendfile con enlaces simbólicos

Estoy usando capistrano para administrar implementaciones y en cada versión, hay un enlace simbólico al directorio compartido/de activos (p. Ej./Var/www/site/releases/1234/assets =>/var/www/site/shared/assets). El problema es que XSendFile no parece seguir los enlaces simbólicos. En mis registros de Apache, estoy viendo el siguiente error:

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

yo he dado la configuración XSendFilePath como

XSendFilePath /var/www/site/shared/assets 

Si cambio la configuración para:

XSendFilePath /var/www/site/releases 

Entonces todo funciona bien. Entonces tengo un par de preguntas:

1) ¿Hay alguna manera de hacer que XSendFilePath siga el enlace simbólico?

2) ¿Existe un riesgo de seguridad al configurar XSendFilePath en mi directorio de releases? En otras palabras, ¿abro el acceso a todo ese directorio?

Respuesta

7

¿Va a crear el enlace usando una tarea after "deploy:finalize_update" similar a esto:

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

Esto hace XSendFilePath ver el enlace como /var/www/site/current/assets lo que lo coloca en el interior de la trayectoria de la raíz.

También asegúrese de que el usuario que ejecuta su aplicación posee y tiene permisos de escritura en/var/www/site/shared/assets.

+0

Gracias por la respuesta. Pasé de este proyecto, pero tu respuesta definitivamente tiene sentido. – bostonou

+1

Esto no nos funcionó hasta que resolvimos el enlace simbólico utilizando 'Pathname # realdirpath'. –

+0

No funciona para mí, incluso cuando uso 'Pathname # realdirpath' :( – wrzasa

Cuestiones relacionadas