Link a file in directory diversa da public

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?

Il 18 novembre 2011 11:01, Mauro [email protected] 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 ?

pietro

Il 18 novembre 2011 11:33, Mauro [email protected] 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} 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/ o simili: il fatto che a /var/www/ corrisponda
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

2011/11/18 Pietro G. [email protected]:

Nel caso in oggetto, cosa mail /var/www/docs/file.pdf? forse
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} non saprei come
eliminare il /var/www iniziale.

2011/11/18 Pietro G. [email protected]:

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