WedX - журнал о программировании и компьютерных науках

Rails Всякий раз, когда рейк прерывается! PG::ConnectionBad: fe_sendauth: пароль не указан

Я использую гем Whenever для Rails для запуска задачи rake, проверяющей базу данных Postgres на наличие обновлений записей. Запуск файла rake при подключении к серверу по SSH работает нормально, но с заданием cron он не запускается с сообщением об ошибке.

rake aborted! PG::ConnectionBad: fe_sendauth: no password supplied

Моя установка выглядит следующим образом:

база данных.yml

default: &default
   adapter: postgresql
   host: localhost
   pool: 5
   encoding: utf8
   timeout: 5000
   username: username
   password: password

 development:
   <<: *default
   database: development
   password: password

 test:
   <<: *default
   database: test

 production:
  <<: *default
  database: production
  password: password

script.rake

namespace :user do
  desc "TODO"
  task update_subscription: :environment do
    puts "--- Starting user subscription check at #{DateTime.now} ---"
    User.find_each do | user |
      if user.refresh_date.past?
        user.refresh_date = Date.today + 1.month
        puts "User #{user.id} subscription updated"
      end
    end
  end
end

расписание.rb

every 1.day, :at => '00:01 am' do
  rake "user:update_subscription"
end

кронтаб -л

1 0 * * *  /bin/bash -l -c 'cd /home/app/app && RAILS_ENV=production bundle exec rake user:update_subscription --silent >> log/cron_log.log 2>&1'

pg_hba.conf

local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

вывод в файл журнала

--- Starting user subscription check at 2018-11-23T10:20:05+00:00 ---
rake aborted!
PG::ConnectionBad: fe_sendauth: no password supplied
/home/app/app/lib/tasks/script.rake:5:in `block (2 
levels) in <top (required)>'
/home/app/.rbenv/versions/2.3.8/bin/bundle:22:in `load'
/home/app/.rbenv/versions/2.3.8/bin/bundle:22:in `<main>'
Tasks: TOP => user:update_subscription
(See full trace by running task with --trace)

Если я изменю md5 и доверюсь pg_hba.conf, все будет работать, но, насколько я знаю, это не очень хорошо для безопасности в производственной среде.


Ответы:


1

Перейдите в файл database.yml, замените:

хост: локальный хост с хостом: ' '

или проверьте один раз эту ссылку:

PG::ConnectionBad: fe_sendauth: пароль не указан

Rails + Postgres fe_sendauth: пароль не указан

Удачного кодирования ..!!!

23.11.2018
  • Это вызывает другую ошибку rake aborted! PG::ConnectionBad: FATAL: Peer authentication failed for user "username" 23.11.2018
  • Из того, что я могу найти, исправление этой ошибки host: localhost. Возможно, стоит отметить, что база данных находится на том же сервере. 23.11.2018

  • 2

    После гораздо большего количества исследований я думаю, что узнал, почему у меня возникла эта проблема. Задания Cron имеют ограниченные переменные окружения из операционной системы. Это означало, что имя пользователя, пароль, пользователь unix и т. д. были недоступны, и поэтому возвращалась ошибка fe_sendauth: no password supplied. К сожалению, я не смог найти решение, которое работало бы в моей ситуации, но я перешел от использования Whenever к Crono, который отлично работает примерно с тем же кодом.

    Если кто-то хочет предложить что-то, что может сработать для исходного вопроса, пожалуйста, будьте моим гостем. Где возможно, я попробую их, если один из них сработает.

    27.11.2018

    3

    Для меня решением было определить пароль базы данных как переменную среды. Например. в файле /etc/environment.

    03.05.2021
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]