2011-08-06 103 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