Help on building a plugin

Hi,

I’ve developed some code that allows you to use s3 as a cache store
(ie store your cache fragments at s3 instead of your web server).

It works great when I have the code in my lib/ folder.

Now I want to package it as a plugin. i’m stuck.

My plugin directory is structured:

  • s3cache
    – init.rb
    – lib/
    ----- s3_cache.rb
    ----- s3.rb

My init.rb file is this:
require ‘s3_cache’

My lib/s3_cache file begins with:

require ‘S3’

class S3Cache <
ActionController::Caching::Fragments::UnthreadedFileStore
def initialize(bucket, cache_directory)
@aws_access_key = ‘YOURAWSACCESSKEY’ # your AWS ACCESS
KEY
@aws_secret_access_key = ‘YOURAWSSECRETKEY’ # your SECRET
@bucket = bucket


In my config/environments/development.rb file I add the following
line:
config.action_controller.fragment_cache_store =
S3Cache.new(“quizical”, “cache”)


The problem is now when I start my server, I get the following error

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/
active_support/dependencies.rb:123:in `const_missing’: uninitialized
constant S3Cache (NameError)


Everything works fine if I put s3_cache.rb and s3.rb in my lib/
folder. But I seem to be missing something in init.rb of my plugin or
have something else structured wrong.

any ideas?

Steve

ps. check it out at www.quizical.net and see if you can tell speed-
wise that I’m storing cache fragments at s3. I’m also serving up all
of my public directory from s3 too - essentially using it as my asset
server.

On 2/13/07, [email protected] [email protected] wrote:

The problem is now when I start my server, I get the following error

Plugins are loaded after the environment is loaded. Subscribe to
Rick O.'s blog and read these entries:
http://weblog.techno-weenie.net/2007/1/24/understanding-the-rails-initialization-process

then

http://weblog.techno-weenie.net/2007/1/25/understanding-the-rails-initialization-process-part-2

Shortcut: in config/environments/development.rb put:

config.after_initialize do
config.action_controller.fragment_cache_store =
S3Cache.new(“quizical”, “cache”)
end


Chris W.

Doh! Of course. Thanks Chris. That was what I needed.