Подтвердить что ты не робот

Rails Rake Task - доступ к классу модели

Я хотел бы определить задачу rake (1.9.2) -on-Rails (3.0.5), которая добавляет пользователя в таблицу User. Файл выглядит следующим образом:

#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

Затем я вызывал задачу как

> rake defaultuser:adduser

Я тестировал код в задаче: adduser в консоли Rails, и он отлично работает. Я тестировал задачу рейка, работая только

print "defaultuser:adduser"

в теле задачи, и он работал нормально.

Однако, когда я их объединил, он жаловался, говоря

rake aborted!
uninitialized constant User

Я попробовал

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

выше определения пространства имен в файле рейка, но это не сработало. Я получил

rake aborted!
ActiveRecord::ConnectionNotEstablished

Что мне нужно сделать, чтобы иметь тот же доступ к классу модели пользователя в задаче Rake, который у меня есть в консоли Rails?

4b9b3361

Ответ 1

Вы близко:)

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

Обратите внимание на использование: среды, которая устанавливает необходимую среду Rails перед вызовом задачи rake. После этого объект пользователя будет находиться в области видимости.