Rails Rake Task - Доступ к модельному классу - PullRequest
38 голосов
/ 10 марта 2011

Я хотел бы определить задачу rake Ruby (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="bob@example.com"
    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, но это не сработало. Я получил

rake aborted!
ActiveRecord::ConnectionNotEstablished

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

1 Ответ

96 голосов
/ 10 марта 2011

Вы близки:)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...