2014-06-08 33 views
0

我正在嘗試使用dotenv gem安全地存儲oci8連接的密碼。我.ENV文件看起來像這樣:當使用dotenv作爲密碼時,Ruby oci8失敗

# this file is stored in the same location as config.ru 
SCOTT_PASS='tiger' 

這是我的config.ru文件:

require 'dashing' 

require 'dotenv' 
Dotenv.load 

configure do 
    set :auth_token, 'YOUR_AUTH_TOKEN' 

    helpers do 
    def protected! 
    # Put any authentication code you want in here. 
    # This method is run before accessing any resource. 
    end 
    end 
end 

map Sinatra::Application.assets_prefix do 
    run Sinatra::Application.sprockets 
end 

run Sinatra::Application 

下面是該作業失敗。它失敗並出現空密碼錯誤(ORA-01005)。

SCHEDULER.every '1m', :first_in => 0 do |job| 

    conn = OCI8.new('scott', ENV['SCOTT_PASS'], 'orcl') 
    cursor = conn.parse("SELECT COUNT(*) FROM USER_TABLES") 

    cursor.exec 

    r = cursor.fetch 

    send_event('table_count', { current: r }) 
    cursor.close 
    conn.logoff 
end 

我能夠證實Dotenv.load工作正常,因爲我是能夠成功地設置其他變量,因此似乎有一些關於OCI8連接是唯一的。

我對Ruby和編程都很陌生,所以我可能會忽略一些簡單的東西。謝謝!

+0

這個'SCHEDULER'常量是什麼?它在哪裏定義,它是如何執行的? 'config.ru'有什麼相關性? – DMKE

+0

啊。我應該提到這個代碼是使用dashing框架的儀表板的一部分(https://github.com/Shopify/dashing)。我相信調度程序部分只是rufus調度程序組件。 當我用實際密碼替代ENV ['SCOTT_PASS']時,作業代碼正常工作,這是我感到困惑的部分。 –

回答

0

這是一個相當模糊的問題,但根本原因是由於使用了複雜的密碼(字母數字和特殊字符)。相同的密碼在一個小的ruby腳本中正常工作,但放在rufus調度程序下時失敗。切換到20+字符的密碼,無數字或特殊字符解決了問題。猜測可能需要某種類型的轉義。