DataMapper behaving differently when Rails app is run as console and server -


i have rails 3.1 app , use datamapper orm.

i have following models (stripped):

class task   include datamapper::resource   belongs_to :group    def project     group && group.project   end end  class group   include datamapper::resource   belongs_to :project   has n, :tasks end  class project   include datamapper::resource   has n, :groups end 

i found out datamapper retreives data in different way when app run server , console when calling task#project.

when run server tries retrieve group record, result (see project_id):

#<group @id=4 @created_at=fri, 19 apr 2013 06:13:25 +0000 @updated_at=fri, 19 apr 2013 06:13:25 +0000 @name="in progress" @weight=<not loaded> @sync_updated_at=<not loaded> @sync_created_at=<not loaded> @capacity=<not loaded> @project_id=nil> 

when run console, , retreived manually via group.get(4), result (see project_id):

#<group @id=4 @created_at=fri, 19 apr 2013 06:13:25 +0000 @updated_at=fri, 19 apr 2013 06:13:25 +0000 @name="in progress" @weight=<not loaded> @sync_updated_at=<not loaded> @sync_created_at=<not loaded> @capacity=<not loaded> @project_id=1> 

methods not monkey patched:

1.9.1 :060 > group.instance_method(:project).source_location  => ["/var/www/app/shared/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/model/relationship.rb", 333]  1.9.1 :061 > group.instance_method(:project_id).source_location  => ["/var/www/app/shared/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/model/property.rb", 206]  1.9.1 :062 > group.instance_method(:project_id=).source_location  => ["/var/www/app/shared/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/model/property.rb", 235]  1.9.1 :063 > group.instance_method(:project=).source_location  => ["/var/www/app/shared/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/model/relationship.rb", 358]  

the environment same in both scenarios.

sql queries not same in both scenarios both ask value of project_id:

console:

 ~   sql (0.038ms)  set sql_auto_is_null = 0  ~   sql (0.028ms)  set session sql_mode = 'ansi,no_backslash_escapes,no_dir_in_create,no_engine_substitution,no_unsigned_subtraction,traditional'  ~   sql (0.033ms)  select `id`, `type`, `created_at`, `updated_at`, `name`, `project_id` `groups` `id` = 3 limit 1 

server:

select `id`, `created_at`, `updated_at`, `type`, `name`, `project_id` `groups` `id` = 3 order `id` 

i've found out workaround should not required. if change task#project definition to:

def project   group && task.get(group.project_id) end 

it retreives associated task.

any ideas can cause such difference?

check these:

  1. are using same environment when running app on console , server.

  2. turn debug mode on datamapper::logger.new($stdout, :debug) , see actual query being executed.

if still have problem, update question output of debug mode , comment answer


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -