Ruby oci8 завершается ошибкой при использовании dotenv для пароля
Я пытаюсь использовать гем dotenv для безопасного хранения пароля для подключения 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 ответ
Это была довольно неясная проблема, но основная причина была в сложном пароле (буквенно-цифровые и специальные символы). Тот же пароль работал правильно в небольшом скрипте ruby, но не работает, если его поместить в планировщик rufus. Переход на пароль длиной более 20 символов без цифр или специальных символов решил проблему. Угадай, что может потребоваться какой-то тип побега.