2011-08-06 73 views
3

我想模糊ruby脚本的用户输入(例如,输入密码时)。我已经尝试使用'密码'宝石和'highline/import'宝石,正如this堆栈溢出文章所建议的那样。但是,我似乎有一些问题让宝石发挥作用。当我的脚本是:红宝石的“密码”似乎没有正确安装

require 'password' 
require 'rubygems' 
require 'activesupport' 

它输出以下错误。

C:\Users\username\Desktop>ruby test.rb 
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- 
activesupport (LoadError) 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from C:/Ruby192/lib/ruby/gems/1.9.1/gems/password-1.3/lib/password.rb:1: 
in `<top (required)>' 
     from <internal:lib/rubygems/custom_require>:33:in `require' 
     from <internal:lib/rubygems/custom_require>:33:in `rescue in require' 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from test.rb:1:in `<main>' 

我不确定'主动支持'是否必要;我添加它是因为第一个错误行,它似乎没有帮助。我试着查看RubyGems文档服务器中找到的rdoc信息,查找每条单独的行,但仍然无法完全掌握问题所在。我在Windows环境中使用Ruby 1.9.2p180。任何有识之士将不胜感激。先谢谢你。

编辑 - 继卡斯帕的建议,并安装海莱/进口宝石(gem install highline),我能找到以下解决我的模糊输入密码的终极目标是:

require 'rubygems' 
require 'highline/import' 

username = ask("Enter username: ") { |x| x.echo = true } 
password = ask("Enter password: ") { |x| x.echo = "*" } #assign false to echo nothing 

产生如下:

Enter username: Joe 
Enter password: ********* 

感谢卡斯帕!

回答

4

你需要加载rubygems之前你试图加载任何其他的宝石文件。 rubygems是什么使您的Ruby程序加载其他宝石,require

gem install ruby-password 
+0

谢谢你的回应:

require 'rubygems' require 'password' require 'activesupport' 

但是之前你需要安装它,您可以使用密码宝石。我按照你的建议重组了宝石。但是,我无法在Windows环境或Linux VM上安装ruby-password。他们一直抱怨:'错误:无法构建gem原生扩展.'我尝试安装Windows DevKit,但似乎没有正确安装。 Devkit的目的是在Windows上产生一个'Sane'环境(包括gcc,make,sh),所以它不应该影响Linux。所以我不确定我在做什么错 - 我不能得到ruby-password来安装。 – shelladept

+0

嗯..查看密码需要在您安装之前安装一个名为'cracklib'的软件。你有两个选择:a)查看密码gem中的代码,并将你需要的部分提取到你自己的项目中(你不需要cracklib部分,只需要密码询问系统),或者b)使用'highline'宝石代替。 – Casper

+0

再次感谢您的帮助;我再次尝试了'highline/import'宝石,它的工作原理与它应有的一样。我认为这是由于我按照你的建议对宝石进行了重新排序。非常感谢! – shelladept