2017-01-26 3 views
0

Я новичок в 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 

Но когда я запускаю код, используя эту команду рек create_cust: create_cust [some_new _pass] пароль ситка не используется. Как я могу переопределить переменную @passwd, если я отправлю аргумент CLI?

ответ

0

Если вы используете zsh, вам необходимо передать параметры для команды rake следующим образом: create_cust:create_cust\[some_new _pass\].

0

Я думаю, что вы не должны указывать пароли в командной строке, поскольку они могут быть сохранены в вашей истории сеансов, что представляет собой угрозу безопасности. Я рекомендую вам создать задачу, которая запрашивает у пользователя необходимую информацию, создает модель и сообщает об ошибках, если таковые имеются. Мой подход выглядит следующим образом:

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 

В зависимости от ваших потребностей, вы можете продлить его не запрашивая аргументы, указанных в командной строке (например, по электронной почте).

Смежные вопросы