【问题标题】:Create basic Rake Tasks创建基本的 Rake 任务
【发布时间】:2017-01-26 08:24:30
【问题描述】:

我是 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?

【问题讨论】:

    标签: ruby-on-rails ruby rake rakefile


    【解决方案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
    

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

    【讨论】:

      【解决方案2】:

      如果你使用 zsh,你需要像这样向 rake 任务传递参数:create_cust:create_cust\[some_new _pass\]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 2011-08-08
        • 2013-06-15
        相关资源
        最近更新 更多