# Link a file in directory diversa da public

**URL:** <https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996>\
**Category:** IT\
**Created:** [November 18, 2011, 11:01am UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996 "2011-11-18T11:01:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [November 18, 2011, 11:01am UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996/1 "2011-11-18T11:01:35Z")

</div>

Sto utilizzando paperclip per l’upload di files.  
Il path di default e’ sotto la directory public e il link\_to all’url  
del file funziona senza problemi, il pdf in questo caso viene aperto.  
Se pero’ cambio il path e, ad esempio, faccio mettere i files sotto  
/var/www/docs, mi dice:

No route matches [GET] “/var/www/docs/file.pdf”

Devo aggiungere esplicitamente la route?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [November 18, 2011, 11:07am UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996/2 "2011-11-18T11:07:46Z")

</div>

Il 18 novembre 2011 11:01, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Sto utilizzando paperclip per l’upload di files.  
> Il path di default e’ sotto la directory public e il link\_to all’url  
> del file funziona senza problemi, il pdf in questo caso viene aperto.  
> Se pero’ cambio il path e, ad esempio, faccio mettere i files sotto  
> /var/www/docs, mi dice:
> 
> No route matches [GET] “/var/www/docs/file.pdf”
> 
> Devo aggiungere esplicitamente la route?

Ciao,

delle due l’una:

- o vuoi servire un file raggiungibile dal webserver (apache o chi per  
lui), e allora usi un’URL che abbia senso per il webserver,
- o vuoi servire un file non raggiungibile dal webserver, per esempio  
perch un file privato che non tutti debbono vedere, e allora usi  
una URL che punta a un tuo controller che usa send\_file per inviare il  
file.

Nel caso in oggetto, cosa mail /var/www/docs/file.pdf? forse  
[http://nome.di.questo.host/docs/file.pdf](http://nome.di.questo.host/docs/file.pdf) ?

pietro

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [November 18, 2011, 11:48am UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996/3 "2011-11-18T11:48:39Z")

</div>

Il 18 novembre 2011 11:33, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Personalizzando il path e mettendo has\_attached\_file :doc, {:path =\>  
> ‘/var/www/:attachment/:id/:style/:filename’} il file mi viene  
> memorizzato sotto la root del webserver ma volendo utilizzare un link  
> del tipo "[http://localhost/#{document.doc.path}](http://localhost/#%7Bdocument.doc.path%7D) non saprei come  
> eliminare il /var/www iniziale.

Non so se paperclip ha un’opzione specifica in tal senso, ma penso che  
ti tocchi sostituire esplicitamente il /var/www/ iniziale con  
[http://localhost/](http://localhost/) o simili: il fatto che a /var/www/ corrisponda  
[http://localhost/](http://localhost/) legato alla configurazione di apache, che potrebbe  
essere completamente diversa.

Io scriverei un metodo, come helper o altro, a seconda di dove lo vuoi  
utilizzare, che so, paperclip\_path\_to\_url, in modo da isolare questa  
informazione in un’unico posto, cos se poi decidi che la root  
un’altra, devi cambiare solo una riga di codice e non migliaia.

pietro

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [November 18, 2011, 11:34am UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996/4 "2011-11-18T11:34:26Z")

</div>

2011/11/18 Pietro G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Nel caso in oggetto, cosa mail /var/www/docs/file.pdf? forse  
> [http://nome.di.questo.host/docs/file.pdf](http://nome.di.questo.host/docs/file.pdf) ?

Il problema e’ la personalizzazione del path nel senso che paperclip  
per evitare che file con lo stesso nome vengano sovrascritti aggiunge  
al path un :id.  
Percio’, ad esempio, document.doc.path mi darebbe  
dir/quellochee/1/file.pdf.  
Personalizzando il path e mettendo has\_attached\_file :doc, {:path =\>  
‘/var/www/:attachment/:id/:style/:filename’} il file mi viene  
memorizzato sotto la root del webserver ma volendo utilizzare un link  
del tipo "[http://localhost/#{document.doc.path}](http://localhost/#%7Bdocument.doc.path%7D) non saprei come  
eliminare il /var/www iniziale.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [November 18, 2011, 12:14pm UTC](https://www.ruby-forum.com/t/link-a-file-in-directory-diversa-da-public/213996/5 "2011-11-18T12:14:01Z")

</div>

2011/11/18 Pietro G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> [http://localhost/](http://localhost/) legato alla configurazione di apache, che potrebbe  
> essere completamente diversa.
> 
> Io scriverei un metodo, come helper o altro, a seconda di dove lo vuoi  
> utilizzare, che so, paperclip\_path\_to\_url, in modo da isolare questa  
> informazione in un’unico posto, cos se poi decidi che la root  
> un’altra, devi cambiare solo una riga di codice e non migliaia.

Ho risolto in questo modo:

class Document \< ActiveRecord::Base  
belongs\_to :company  
has\_attached\_file :doc,  
:url =\> ‘:attachment/:id/:style/:filename’,  
:path =\> ‘/var/www/:attachment/:id/:style/:filename’  
end
