Search code examples
ruby-on-railsmongrelproduction-environment

Problem running RoR app in production environment


Have an app that has "listings" - think classified ads - and each listing has a list of tags.

The following code fails when I run the app in production mode, but works fine under development mode

uninitialized constant ActiveRecord::Acts::Taggable::InstanceMethods::TagList
Extracted source (around line #45):

42:         
43:         <span class="listingIndexTags">
44:             Location: [location] | Tags:
45:             <% tag_list = listing.tag_list %>
46:             <% if tag_list != nil %> 
47:                 <% for tag in tag_list %>
48:                     <%= link_to tag.to_s, { :action => "filter_on",

The command line I'm using to start my mongrel instance in this test case: ruby script/server mongrel -e production

Defaults to port 3000. I can access other views in the app that DON'T call "listing.tag_list".

".tag_list" is provided by "acts_as_taggable_on_steroids", which I'm using in this app. It is installed as a gem.

Maybe my environment files are wonky?

Here's my development.rb file

config.cache_classes = false

config.whiny_nils = true

config.action_controller.consider_all_requests_local = true
config.action_view.debug_rjs                         = true
config.action_controller.perform_caching             = false

config.action_mailer.raise_delivery_errors = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  ...took these settings out for this post...
}

And my production.rb file...

config.cache_classes = true
config.threadsafe!  

config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching             = true

config.cache_store = :mem_cache_store

config.action_mailer.raise_delivery_errors = false

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  ...took these settings out for this post...
}

Solution

  • FIXED:

    Well, after putting off fixing this bug until I absolutely had to (today), I at long last found the source of the issue.

    The inclusion of the line: config.threadsafe!

    In my "production.rb" file was causing it.

    I finally found it by:
        1. Making my production and development environment files identical
        2. Line-by-line, changing the production environment file until it either:
          a. The app broke in production mode
          b. I was back to my original production file
    

    Anyhow, when I got to adding the "config.threadsafe!" line - IT BROKE! I was never so happy to have an app break.

    So, a little reading to understand what exactly this option does, in conjuction with Mongrel (if Mongrel is even relevant), and I'll have my answer.