Forum: Italian Ruby user group Attchement_fu e directory public

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
278cbf1cc439901141f0de3796f03ebf?d=identicon&s=25 Dboz Dboz (dbozz)
on 2009-04-17 16:45
Sto sviluppando una applicazione protetta da sessione dove è prevista
una gestione di una web gallery.
Le immagini caricate sul server tramite attchement_fu devono essere
visibili solo a chi si autentica sul sito.
Gestendo le sessioni etc... tutto ok .
L'unica cosa è che le immagini salvati su file system sono visibili a
chiunque basta inserire nel browser l'indirizzo di una immagine
es: http://dominio/images/upload/0000/0001/azienda_thu...

Qualcuno ha già affrontato questo problema?
Dc64befa87f79e074d55f83bcf9daa49?d=identicon&s=25 Silvano Stralla (sistrall)
on 2009-04-17 18:26
(Received via mailing list)
Ciao!

Non ho mai affrontato direttamente il problema, ma fortunatamente
l'hanno fatto altri e in maniera anche approfondita:
http://www.therailsway.com/2009/2/22/file-download...

Per riassumere i passaggi, occorre:

1. Posizionare i file fuori dalla cartella public/
2. Intercettare le richieste di file mediante un controller
3. Usare, nel controller, il metodo send_file

Al link che ti ho indicato c'è anche spiegato come far si che a
sobbarcarsi il lavoro di spedizione effettiva non sia l'applicazione
Ruby (che non potrebbe dedicarsi ad altre cose più interessanti), ma
il server web (che per spedire file è nato e si presume lo sappia fare
bene).

Ciao,
Silvano

2009/4/17 Dboz Dboz <a.dallabenetta@gmail.com>:
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Considera l'ambiente prima di stampare questa email. Dai, che
l'equazione è semplice: meno A4, più alberi.


. . . Silvano Stralla . . .
email: silvano.stralla@sistrall.it
site: http://www.sistrall.it
969047aea93d01a9cc636e9867f4ec0f?d=identicon&s=25 Serafino Picozzi (serpico)
on 2009-04-17 18:56
Ho risposto proprio ieri alla stessa domanda sul forum in inglese eheh.
Tenendo conto di quanto scritto nel forum precedente, effettivamente la
soluzione sta nel mostrare file e documenti tramite un'azione in un
controller, alla quale evidentemente puoi applicare i vari filtri del
caso.

Quando dichiari  has_attachment puoi anche indicare la cartella di
salvataggio con :path_prefix .
Puoi usare qualcosa come :path_prefix => "resources/#{table_name}"
impostando il salvataggio nella cartella resources (e non public
quindi).

Per accedere al file usi send_file, che ti consiglio di andare a vedere
nelle API, puoi anche impostare per esempio il parametro :disposition
che indica se il file va scaricato (un documento) o mostrato nel browser
(un'immagine per esempio)
114ff87909d3f24150ff3d70d5254338?d=identicon&s=25 Luca Guidi (Guest)
on 2009-04-17 22:05
(Received via mailing list)
Se usi Mongrel c'è una soluzione basata su token "usa e getta" che ti
permette di bypassare il (pesante) ciclo req/res di Rails.

http://www.mail-archive.com/mongrel-users@rubyforg...

Piccolo suggerimento: bypassare mi fa venire in mente Rack/Metal,
potresti estendere Rails::Rack::Static, il middleware bundled con Rails
2.3.2

Luca
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-04-20 10:07
Luca Guidi wrote:
> Se usi Mongrel c'� una soluzione basata su token "usa e getta" che ti
> permette di bypassare il (pesante) ciclo req/res di Rails.
>
> http://www.mail-archive.com/mongrel-users@rubyforg...
>
> Piccolo suggerimento: bypassare mi fa venire in mente Rack/Metal,
> potresti estendere Rails::Rack::Static, il middleware bundled con Rails
> 2.3.2
>
> Luca

Metal non l'ho mai utilizzato ma ho letto che è 25 volte più veloce di
un normale application controller di rails. Potresti indirizzare la
richiesta ad un normale controller per effettuare i controlli di
autenticazione ecc. e se passano utilizzi metal per spedire il file.
Forse in questo caso puoi fare tutto direttamente con metal
114ff87909d3f24150ff3d70d5254338?d=identicon&s=25 Luca Guidi (Guest)
on 2009-04-20 10:18
(Received via mailing list)
Marco Mastrodonato wrote:
> Metal non l'ho mai utilizzato ma ho letto che è 25 volte più veloce di
> un normale application controller di rails. Potresti indirizzare la
> richiesta ad un normale controller per effettuare i controlli di
> autenticazione ecc. e se passano utilizzi metal per spedire il file.
> Forse in questo caso puoi fare tutto direttamente con metal
Metal non è "veloce" di suo, è solo in grado di intercettare delle
routes che gli imposti e di soddisfarne le request in modo semplice,
senza passare attraverso ActionPack.
Lo scenario da te configurato è inefficiente perché prevede proprio
l'opposto di quello per cui Metal è stato inventato, cioè bypassare lo
stack. Ha solo il vantaggio di non tenere occupato un controller per
l'invio del file, non è poco, il punto è che non credo si possa
"rispedire" il controllo ad un middleware.

Luca
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-04-20 10:48
Non capisco cosa intendi con "non è veloce di suo", se ti permette di
evitare un percorso lento di rails io questa "velocità" guadagnata la
attribuisco a questa gestione fatta col middleware, no? Rispedire il
controllo non saprei... io intendevo un redirect intercettato con metal.
Sarebbe bello fare tutto il download con metal, se è integrato con rails
non dovrebbero esserci problemi ad arrivare alle risorse
dell'applicazione solo che non avendolo mai usato non so cosa comporti.
114ff87909d3f24150ff3d70d5254338?d=identicon&s=25 Luca Guidi (Guest)
on 2009-04-20 12:39
(Received via mailing list)
Marco Mastrodonato wrote:
> Non capisco cosa intendi con "non è veloce di suo", se ti permette di
> evitare un percorso lento di rails io questa "velocità" guadagnata la
> attribuisco a questa gestione fatta col middleware, no?
Guadagni velocità perché è meno complesso dello stack Rails e
soprattutto perché ti permette di bypassarlo.
Puoi trovare una intro qui:
http://railscasts.com/episodes/150-rails-metal

Luca
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-04-20 16:31
Stavo provando ma non funziona il send_file dentro metal forse fa parte
dell'action pack?
114ff87909d3f24150ff3d70d5254338?d=identicon&s=25 Luca Guidi (Guest)
on 2009-04-20 16:46
(Received via mailing list)
Marco Mastrodonato wrote:
> Stavo provando ma non funziona il send_file dentro metal forse fa parte
> dell'action pack?
usa Rack::File, ecco un esempio di come si utilizza:
http://github.com/rails/rails/blob/489abfd3b23f3c4...

Luca
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-04-23 12:11
Luca Guidi wrote:
> Marco Mastrodonato wrote:
>> Stavo provando ma non funziona il send_file dentro metal forse fa parte
>> dell'action pack?
> usa Rack::File, ecco un esempio di come si utilizza:
> 
http://github.com/rails/rails/blob/489abfd3b23f3c4...
>
> Luca

Volevo risponderti dopo aver fatto una prova ma purtroppo non sono
ancora riuscito a farla, intanto ti ringrazio per l'utile esempio
278cbf1cc439901141f0de3796f03ebf?d=identicon&s=25 Dboz Dboz (dbozz)
on 2009-05-05 14:31
Grazie a tutti per le risposte !!!
Ho optato nel cambiare il path_prefix e usare send_file
Saluti
This topic is locked and can not be replied to.