I have a rake task that contains an eval call. namespace :db do namespace :load do desc ''Loads factories into db'' task :factories => :environment do ActiveRecord::Base.establish_connection( ENV[ ''RAILS_ENV'' ] ) FACTORIES.each do |f| puts "Loading factory: #{ f }" data = IO.read( "#{ RAILS_ROOT }/test/factories/#{ f }.rb" ) eval data end end end end My problem is the eval executes when loading script/console or executing `rake -T`, it fires even though I''m not calling it. What''s a better way? -- Greg Donald http://destiney.com/
I''m almost certain that neither of these issues is causing the problem you''re seeing, but who knows... - why are you calling establish_connection directly? The :environment task should be doing it for you... - rather than reading and eval''ing, why not just use load()? --Matt Jones On Jun 2, 2:19 pm, Greg Donald <gdon...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have a rake task that contains an eval call. > > namespace :db do > namespace :load do > desc ''Loads factories into db'' > task :factories => :environment do > ActiveRecord::Base.establish_connection( ENV[ ''RAILS_ENV'' ] ) > FACTORIES.each do |f| > puts "Loading factory: #{ f }" > data = IO.read( "#{ RAILS_ROOT }/test/factories/#{ f }.rb" ) > eval data > end > end > end > end > > My problem is the eval executes when loading script/console or > executing `rake -T`, it fires even though I''m not calling it. > > What''s a better way? > > -- > Greg Donaldhttp://destiney.com/
On Wed, Jun 3, 2009 at 9:05 AM, Matt Jones <al2o3cr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > I''m almost certain that neither of these issues is causing the problem > you''re seeing, but who knows... > > - why are you calling establish_connection directly? The :environment > task should be doing it for you... > > - rather than reading and eval''ing, why not just use load()?Thanks. Following your suggestions I now have: namespace :db do namespace :load do desc ''Loads factories into db'' task :factories => :environment do FACTORIES.each do |f| load( "#{ RAILS_ROOT }/test/factories/#{ f }.rb" ) end end end end Works fine but my problem still exists. When I do `rake -T` I see in the logs my code from test/factories/* is being ran, data is being inserted. Something else I noticed.. if I put a debugger call inside the task block it drops me to a prompt twice, not just once as expected. So at this point I''ve tried eval, load, and system, and all are being executed without the rake task being called. Anyone? -- Greg Donald http://destiney.com/
I have to admit I''m pretty stumped. If you make another rake task, does it get loaded as well? Maybe a dummy task like: desc "Does nothing" task :dummy_task => :environment do puts "Blargh!" end If that gets run, there''s something really weird going on with your Rake. If not, then something about the db:load task is weird... --Matt Jones On Jun 3, 10:20 am, Greg Donald <gdon...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Works fine but my problem still exists. When I do `rake -T` I see in > the logs my code from test/factories/* is being ran, data is being > inserted. > > Something else I noticed.. if I put a debugger call inside the task > block it drops me to a prompt twice, not just once as expected. > > So at this point I''ve tried eval, load, and system, and all are being > executed without the rake task being called. >