How to get Rails 3.1's Cache store (FileStore) to work with Rack::Sendfile

27 views
Skip to first unread message

Ramon Tayag

unread,
Nov 5, 2011, 1:14:47 PM11/5/11
to Ruby on Rails Talk Group
Hey - I need your input regarding a problem I've come across. I'll first explain what the problem is, and what I think the solution is. If I misunderstood how things work, please let me know.

# The problem

I'm using Dragonfly (on-the-fly file processing) to serve images. Dragonfly uses Rack::Cache to cache the processed images so subsequent requests are served by Rack::Cache. The problem lies in Rack::Cache getting too busy serving images. I thought the fix would be to let Rack::Cache use Apache's X-Sendfile to serve images.  You can read my journey in a StackOverflow question I posted.

# The solution

The solution would be to enable whatever's needed to get Rack::Cache to serve files using X-Sendfile through Rack::Sendfile. After poking around Rack::Cache, I found out that none of the Rack::Cache Entitystores are used -- what's being used is Rails' own storage solution.

Is there a reason that FileStore doesn't support Rack::Sendfile at the moment (why it uses Marshal)? What would be the easiest way to get to what I need? Can I just tell Rails to use Rack::Cache's Disk entitystore? If not, what do you guys think of letting the body of the response of FileStore (yes, a bit of a mouthful) to respond to `to_path`?

Thanks!
Ramon Tayag

Frederick Cheung

unread,
Nov 5, 2011, 2:28:05 PM11/5/11
to Ruby on Rails: Talk


On Nov 5, 5:14 pm, Ramon Tayag <ra...@tayag.net> wrote:
> Hey - I need your input regarding a problem I've come across. I'll first
> explain what the problem is, and what I think the solution is. If I
> misunderstood how things work, please let me know.
>
> # The problem
>
> I'm using Dragonfly (on-the-fly file processing) to serve images. Dragonfly
> uses Rack::Cache to cache the processed images so subsequent requests are
> served by Rack::Cache. The problem lies in Rack::Cache getting too busy
> serving images. I thought the fix would be to let Rack::Cache use Apache's
> X-Sendfile to serve images.  You can read my journey in a StackOverflow
> question I posted <http://stackoverflow.com/q/7980106/61018>.
>
Not really answering your question, but I've handled this situation by
putting varnish in front of apache.

Fred



> # The solution
>
> The solution would be to enable whatever's needed to get Rack::Cache to
> serve files using X-Sendfile through Rack::Sendfile. After poking around
> Rack::Cache, I found out that none of the Rack::Cache Entitystores are used
> -- what's being used is Rails' own storage
> solution<https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/acti...>
> .
>
> Is there a reason that FileStore doesn't support Rack::Sendfile at the
> moment (why it uses Marshal)? What would be the easiest way to get to what
> I need? Can I just tell Rails to use Rack::Cache's Disk entitystore? If
> not, what do you guys think of letting the *body* of the *response* of *
> FileStore* (yes, a bit of a mouthful) to respond to `to_path`?
>
> Thanks!
> Ramon Tayag

Ramon

unread,
Nov 5, 2011, 10:49:36 PM11/5/11
to rubyonra...@googlegroups.com
Isn't Varnish for much busier sites though? I tried going this route but I thought that this might be overkill.

Frederick Cheung

unread,
Nov 6, 2011, 7:22:50 AM11/6/11
to Ruby on Rails: Talk


On Nov 6, 2:49 am, Ramon <ramon.ta...@gmail.com> wrote:
> Isn't Varnish for much busier sites though? I tried going this route but I
> thought that this might be overkill.

Well it does add one more thing to what your server runs but I found
it relatively easy to use. It does also have the benefit of cutting
ruby out of the picture completely when serving assets.

Fred
Reply all
Reply to author
Forward
0 new messages