2011-03-10 10 views
36

Me gustaría definir una tarea de rake Ruby (1.9.2) -on-Rails (3.0.5) que agrega un usuario a la tabla User. El archivo tiene el siguiente aspecto:Rails Rake Tarea: acceso a la clase de modelo

#lib/tasks/defaultuser.rake 
require 'rake' 
namespace :defaultuser do 
    task :adduser do 
    u=User.new 
    u.email="[email protected]" 
    u.password="password" 
    u.save 
    u.errors.each{|e| p e} 
    end 
end 

me permitiría invocar la tarea como

> rake defaultuser:adduser 

He probado el código en el: adduser tarea en la consola de Rails, y funciona bien. Probé la tarea rastrillo, funcionando solamente

print "defaultuser:adduser" 

en el cuerpo de la tarea, y funcionó bien.

Sin embargo, cuando los combinados, se quejaron, diciendo

rake aborted! 
uninitialized constant User 

que intentaron una

require File.expand_path('../../../app/models/user.rb', __FILE__) 

por encima de la definición de espacio de nombres en el archivo de rastrillo, pero eso no funcionó. Tengo

rake aborted! 
ActiveRecord::ConnectionNotEstablished 

¿Qué tengo que hacer para que tengo el mismo acceso a la clase de modelo de usuario en la tarea Rake que tengo en la consola de Rails?

+0

Pregunta similar: [? Haz rieles rastrillo tareas proporcionan acceso a los modelos ActiveRecord] [1] [1]: http://stackoverflow.com/questions/876396/do-rails-rake-tasks -provide-access-to-activerecord-models –

Respuesta

91

Estás cerca :)

#lib/tasks/defaultuser.rake 
require 'rake' 
namespace :defaultuser do 
    task :adduser => :environment do 
    ... 
    end 

Nota el uso de: medio ambiente, que establece el entorno de Rails necesaria antes de llamar a la tarea rastrillo. Después de eso, su objeto Usuario estará dentro del alcance.

+3

¡Ahhhhhhhhhhhhh! Estuve cerca. Aunque no obtengo la sintaxis. –

+0

http://jasonseifer.com/2010/04/06/rake-tutorial Este tutorial arroja más luz sobre el problema, y ​​también muestra una buena manera de parametrizar la tarea de rake. –

Cuestiones relacionadas