Yup, I created an issue on github: https://github.com/fog/fog/issues/3263

On Tuesday, November 4, 2014 3:32:50 PM UTC+1, geemus wrote:
>
> Yeah, or perhaps something like #get_public_http_url even. I definitely 
> agree being more agnostic is a good plan. If you'd like to file an issue 
> around this we can discuss some more and try to make a plan of attack 
> (otherwise these email threads can get lost in the noise sometimes). Thanks!
>
> On Tue, Nov 4, 2014 at 2:00 AM, David <da...@10io.net <javascript:>> 
> wrote:
>
>>
>> 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 <da...@10io.net> 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 <
>>>>> frederic...@gmail.com> 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 (da...@10io.net) 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 ruby-fog+u...@googlegroups.com.
>>>>>> > 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 ruby-fog+u...@googlegroups.com.
>>>>>> 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 ruby-fog+u...@googlegroups.com.
>>>> 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 ruby-fog+u...@googlegroups.com <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 ruby-fog+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to