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 символов без цифр или специальных символов решил проблему. Угадай, что может потребоваться какой-то тип побега.

Другие вопросы по тегам