I just experienced a very similar situation and it ended up having nothing
to do with the activity.  It was only appearing in production as well.

I don't know the root cause but I believe I was able to fix the problem by
removing the base controller from the cache action.  The commented out line
is the original line.  There may be some other ramifications by removing
this but it solved my problem for the time being.

def cache_action?
    #!logged_in? && controller_name.eql?('base') && params[:format].blank?
    !logged_in? && params[:format].blank?
  end



On Tue, May 11, 2010 at 7:25 PM, Patrick Minton <[email protected]>wrote:

> The following query is doing some weird shit in my database:
>
> >> User.active.find_by_activity({:limit => 5, :require_avatar => false})
> ActiveRecord::RecordNotFound: Couldn't find User with ID=10
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:1591:in
> `find_one'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:1574:in
> `find_from_ids'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:616:in
> `find_without_pagination'
> from
> /apps/thecommunity/releases/20100509205223/vendor/plugins/community_engine/plugins/paginating_find/lib/paginating_find.rb:103:in
> `find'
> from
> /apps/thecommunity/releases/20100509205223/vendor/plugins/community_engine/app/models/user.rb:93:in
> `find'
> from
> /apps/thecommunity/releases/20100509205223/vendor/plugins/community_engine/app/models/user.rb:165:in
> `find_by_activity'
> from
> /apps/thecommunity/releases/20100509205223/vendor/plugins/community_engine/app/models/user.rb:165:in
> `map'
> from
> /apps/thecommunity/releases/20100509205223/vendor/plugins/community_engine/app/models/user.rb:165:in
> `find_by_activity'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/named_scope.rb:186:in
> `send'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/named_scope.rb:186:in
> `method_missing'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2148:in
> `with_scope'
> from (__DELEGATION__):2:in `__send__'
> from (__DELEGATION__):2:in `with_scope'
> from
> /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/named_scope.rb:179:in
> `method_missing'
> from (irb):20
>
> There are two things that are weird about this:
>
> 1) There is, indeed, a user with that ID:
>
> >> u = User.find(10)
> => #<User id: 10, login: "devsample", email: "[email protected]",
> description: "", avatar_id: nil, crypted_password:
> "1ce245b87890a2323e7a67087415b1eb976bd9f3", salt:
> "bc615491c6881df432e99cf24b71712f520dd41a", created_at: "2010-02-24
> 22:27:30", updated_at: "2010-05-11 21:24:05", remember_token: nil,
> remember_token_expires_at: nil, stylesheet: nil, view_count: 3, vendor:
> false, activation_code: "c2f28946842f9822491e4f417d68978b0c63606c",
> activated_at: nil, state_id: nil, metro_area_id: nil, login_slug:
> "devsample", notify_comments: false, notify_friend_requests: true,
> notify_community_news: false, country_id: nil, featured_writer: false,
> last_login_at: "2010-02-24 22:31:08", zip: nil, birthday: "1980-01-01",
> gender: nil, profile_public: true, activities_count: 2, sb_posts_count: 0,
> sb_last_seen_at: "2010-05-11 21:22:00", role_id: 3, first_name: "Dev",
> middle_name: "", last_name: "Sample", company_id: nil, employer_id: nil,
> interests: "", community_hopes: "", community_promises: "", job_favorites:
> "", job_title: "">
>
> 2) That user isn't active so it shouldn't be within the User.active named
> scope and therefore should never be found by the find_by_activity query
> (should it?):
>
> >> u.active?
> => false
> >> u.activated_at
> => nil
>
> Anyone have any idea what's going on here?  Looking at the code in user.rb
> it's kind of unclear to me how this function can limit the users found to
> those within the :active named scope because it just does a :
>
>   def self.find_by_activity(options = {})
>     options.reverse_merge! :limit => 30, :require_avatar => true, :since =>
> 7.days.ago
>     #Activity.since.find(:all,:select => Activity.columns.map{|column|
> Activity.table_name + "." + column.name}.join(",")+', count(*) as
> count',:group => Activity.columns.map{|column| Activity.table_name + "." +
> column.name}.join(","),:order => 'count DESC',:joins => "LEFT JOIN users
> ON users.id = activities.user_id" )
>     #Activity.since(7.days.ago).find(:all,:select => 'activities.user_id,
> count(*) as count',:group => 'activities.user_id',:order => 'count
> DESC',:joins => "LEFT JOIN users ON users.id = activities.user_id" )
>     activities = Activity.since(options[:since]).find(:all,
>       :select => 'activities.user_id, count(*) as count',
>       :group => 'activities.user_id',
>       :conditions => "#{options[:require_avatar] ? ' users.avatar_id IS NOT
> NULL' : nil}",
>       :order => 'count DESC',
>       :joins => "LEFT JOIN users ON users.id = activities.user_id",
>       :limit => options[:limit]
>       )
>     activities.map{|a| find(a.user_id) }
>   end
>
> And, in fact, if I do it without the named scope it works fine:
>
> >> users = User.find_by_activity({:limit => 5, :require_avatar => false});
> nil
> => nil
> >> users.include?(u)
> => true
>
> So, it looks like the :active named scope doesn't actually change which
> users self.find_by_activity will find (because that isn't a generic
> ActiveRecord finder method, I assume), but *does* make ActiveRecord think
> that users that don't meet the conditions in that named scope aren't in the
> database.  Anyone have any suggestions?  This is making the site crash
> because this user updated their profile before deactivating and that profile
> update is one of the most recent activities.
>
>
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "CommunityEngine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<communityengine%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/communityengine?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CommunityEngine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/communityengine?hl=en.

Reply via email to