创建基本的Rake任务

时间:2017-01-26 08:24:31

标签: ruby-on-rails ruby rake rakefile

我是Ruby的新手。我想创建简单的Rake任务来创建具有自定义密码的用户。我试过这段代码:

namespace :users_create do

  @passwd = 'trest333'

  task create_users: :environment do

    Rake::Task["create_cust:create_cust"].invoke

  end

  task :create_users, [:char] => :environment do |environment, args|

    value = args[:char].to_s

    if value.to_s.strip.length != 0

      @passwd = value

      Rake::Task["create_cust:create_cust"].invoke

    end 
  end

  task create_cust: :environment do

    a = User.new
      a.password = @passwd
      a.save()

      puts "password is #{@passwd}"
  end

end

但是当我使用此命令运行代码时,rake create_cust:create_cust [some_new _pass]不使用情景喜剧密码。如果我发送CLI参数,我如何覆盖变量@passwd?

2 个答案:

答案 0 :(得分:1)

我认为您不应该在命令行上指定密码,因为它可能会保存在您的会话历史记录中,这是一个安全风险。我建议您创建一个任务,提示用户提供必要的信息,创建模型并报告错误(如果有)。我的方法如下:

def prompt(message)
  print(message)
  STDIN.gets.chop
end

namespace :users do
  task :create => :environment do
    email = prompt('Email: ')
    password = prompt('Password: ')

    user = User.new(email: email, password: password)
    unless user.save
      STDERR.puts('Cannot create a new user:')
      user.errors.full_messages.each do |message|
        STDERR.puts(" * #{message}")
      end
    end
  end
end

根据您的需要,您可以通过不提示命令行中指定的参数(例如电子邮件)来扩展它。

答案 1 :(得分:0)

如果您使用zsh,则需要将参数传递给rake任务,如下所示:create_cust:create_cust\[some_new _pass\]