使用dotenv作为密码时,Ruby oci8失败

时间:2014-06-08 19:16:03

标签: ruby oci8

我正在尝试使用dotenv gem安全地存储oci8连接的密码。我的.env文件如下所示:

# 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和编程的新手,所以我可能会忽略一些简单的东西。谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个相当模糊的问题,但根本原因是由于使用了复杂的密码(字母数字和特殊字符)。相同的密码在小型ruby脚本中正常工作,但在置于rufus调度程序下时失败。切换到没有数字或特殊字符的20+字符密码解决了这个问题。猜测可能需要某种类型的转义。