我想定义一个Ruby(1.9.2)-on Rails(3.0.5)rake任务,将用户添加到用户表中.文件如下所示:

#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

我在Rails控制台中的:adduser任务中测试了代码,效果很好.

print "defaultuser:adduser"

在任务主体中,它工作得很好.

然而,当我把它们结合在一起时,它抱怨说

rake aborted!
uninitialized constant User

我试了一个

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

在rake文件中的名称空间定义之上,但这不起作用.我得到了

rake aborted!
ActiveRecord::ConnectionNotEstablished

我需要做什么才能在Rake任务中访问与Rails控制台中相同的用户模型类?

推荐答案

你很接近:)

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

注意:environment的使用,它在调用rake任务之前设置了必要的Rails环境.之后,你的用户对象将在范围内.

Ruby-on-rails相关问答推荐

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

Rails 5.1.7:Sprockets::Rails::Helper::AssetNotFound

Ruby on Rails - 外键不匹配

has_many 通过大小验证

NoMethodError:Puma::Events:Class 的未定义方法字符串

Ruby on Rails 7 与 React 集成

Rails 3 的data-method='delete'如何优雅地降级?

Rails Scope 返回 all 而不是 nil

从 Authlogic 迁移到 Devise

如何在生产中部署 resque worker?

单击表格行(使用 bootstrap 程序)时,如何使用模式显示数据?

Ruby on Rails 错误无法加载此类文件 - 更少

使用 oauth 和 twitter ruby​​ gem 时不断收到 OAuth::Unauthorized 错误

如果缺少翻译,则回退到默认语言

按周/月/等和 ActiveRecord 分组?

嵌套模型和父验证

Rails:在 link_to 中保留 GET 查询字符串参数

Ruby 更新后:测试失败,assets资源 未声明为在生产中预编译

ruby on rails 如何处理 NaN

如何删除特殊字符?