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:
are using same
environment
when running app on console , server.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
Post a Comment