I think the non-signed urls can be contructed as "https://#{bucket_name}. s3.amazonaws.com/#{object_name}" 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]> 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]. > 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.
