Yep, I know I could do something like that but I'd like to keep the code "provider agnostic". This way if we change from aws s3 to let's say, rackspace files, it's just a matter of configuring the storage object properly.
Thinking out loud: #get_http_url and #get_https_url could maybe accept the :public => true option in order to build non signed urls. On Monday, November 3, 2014 4:02:18 PM UTC+1, geemus wrote: > > I think the non-signed urls can be contructed as "https://#{bucket_name}. > s3.amazonaws.com/#{object_name} > <http://s3.amazonaws.com/#%7Bobject_name%7D>" or something akin to that, > should you desire the non-signed versions. Perhaps we should more > explicitly have options for constructing those for users though. > > On Mon, Nov 3, 2014 at 5:24 AM, David <[email protected] <javascript:>> > wrote: > >> Hi there, >> >> Thanks for you answers! >> >> I think everything was clear as I understood that fog is more cautious >> than the was sdk. >> My question was simply if there was a way to get the public url without >> all checks. >> >> As advised, I used the underlying helper to get the url: I used >> #request_url of Fog::Storage::AWS::Real >> >> It's nice to know the difference between #get and #new. The only downside >> I see with #get_https_url is that there is no way (from what I see) to >> get the (non signed) public url. >> In my scenario, I'm returning urls of public resources that can be cached >> by some clients (other backends or js apps). It makes more sense in this >> case to use simple (non signed) public urls. >> >> Anyway, thanks again for your answers, >> >> Regards >> David >> >> >> On Tuesday, October 28, 2014 3:06:14 PM UTC+1, geemus wrote: >>> >>> Yeah, I think Fred hit the nail on the head. >>> >>> directories/files#get is explicitly a call to fetch info, whereas #new >>> is simply a call to create a local reference >>> >>> Similarly, the #public_url method on file (for better or worse) was made >>> to be cautious and accurate (so it checks that the file exists before >>> giving a possibly bogus url). In that case, if you drop down to the helper >>> that generates the actual URL it will also avoid the calls, which should >>> hopefully give you what you need. >>> >>> Sorry for any confusion or lack of clarity there. If you have >>> suggestions about how we could better communicate that we would love to >>> hear them (and any documentation you might contribute would be awesome). >>> >>> Thanks! >>> wes >>> >>> On Tue, Oct 28, 2014 at 9:00 AM, Frederick Cheung <[email protected] >>> > wrote: >>> >>>> >>>> d = storage.directories.new(:key => bucket) >>>> d.files.get_https_url("example.txt", 300) >>>> >>>> shouldn't fire any requests although that generates a signed url >>>> >>>> The other approaches do seem to validate things like whether the file >>>> exists and so on. >>>> >>>> Fred >>>> >>>> On 28 October 2014 at 13:29:31, David ([email protected]) wrote: >>>> > Hello! >>>> > >>>> > I have a small issue with this fantastic gem (great work!). >>>> > >>>> > Here is a small script to get the public url of an object stored in >>>> S3: >>>> > >>>> > require "fog" >>>> > >>>> > >>>> > # Fires one request >>>> > storage = Fog::Storage.new( >>>> > :provider => "AWS", >>>> > :aws_access_key_id => ENV["AWS_KEY"], >>>> > :aws_secret_access_key => ENV["AWS_SECRET"], >>>> > :region => "eu-west-1" >>>> > ) >>>> > >>>> > >>>> > # Fires one request >>>> > d = storage.directories.get(ENV["AWS_BUCKET"]) >>>> > >>>> > >>>> > # Fires one request >>>> > d.files.get("A.txt").public_url >>>> > >>>> > As you can see, this script will fire 3 requests to S3. >>>> > >>>> > Now, here is the same script but using the AWS sdk: >>>> > >>>> > require "aws" >>>> > >>>> > >>>> > # No request fired >>>> > s3 = AWS::S3.new( >>>> > :access_key_id => ENV['AWS_KEY'], >>>> > :secret_access_key => ENV['AWS_SECRET'] >>>> > ) >>>> > >>>> > >>>> > # No request fired >>>> > b = s3.buckets[ENV["AWS_BUCKET"]] >>>> > >>>> > >>>> > # No request fired >>>> > b.objects["A.txt"].public_url.to_s >>>> > >>>> > There is not a single request fired. I guess that the idea behind >>>> this is: >>>> > don't hit S3 until you really, really need to. >>>> > >>>> > My main issue is the request fired to get the public_url of an object. >>>> > Let me explain it with an example: let's pretend we are building a >>>> rails >>>> > API backend for movies. Each movie is linked to a poster image which >>>> is >>>> > stored in S3 (as a public read only object). >>>> > Now for the index action, I want the backend to return simply the >>>> name of >>>> > the movie and the url of the poster image. >>>> > The issue here, is that the backend will get the Movie objects and >>>> then for >>>> > each object it will try to get the public url using the corresponding >>>> fog >>>> > object. This will fire a request to S3 for each movie. >>>> > As expected this works well for a small number of Movie objects but >>>> not >>>> > with a reasonable large amount of Movie objects (let's say 100 => 100 >>>> > requests to S3 have to be made to get the urls). >>>> > >>>> > The question is therefore: can we avoid this request when calling >>>> > public_url on a Fog::Storage::AWS::File object? I was wondering if it >>>> is >>>> > possible with Fog? >>>> > >>>> > I know, I could build the public url myself without using Fog. I >>>> could get >>>> > the url of the bucket with public_url of the >>>> Fog::Storage::AWS::Directory >>>> > object and then, build the public url of the object using String >>>> > concatenation/interpolation. The only downside is that, this kind of >>>> code >>>> > is coupled with how S3 objects are organised. I'd like to keep the >>>> code >>>> > "provider agnostic" as much as possible. If we change from S3 to >>>> another >>>> > provider, it's only a matter of storage configuration. That's why we >>>> are >>>> > using Fog instead of aws sdk. >>>> > >>>> > Thanks in advance for any answer. >>>> > >>>> > Regards, >>>> > >>>> > David >>>> > >>>> > -- >>>> > You received this message because you are subscribed to the Google >>>> Groups "ruby-fog" >>>> > group. >>>> > To unsubscribe from this group and stop receiving emails from it, >>>> send an email to [email protected]. >>>> > For more options, visit https://groups.google.com/d/optout. >>>> > >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "ruby-fog" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "ruby-fog" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "ruby-fog" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
