Resque Worker Fake с PostgreSQL Server
-
26-10-2019 - |
Вопрос
Мне удалось создать своих работников, и они привыкли выполнять без проблем (в разработке), но теперь они не в производстве или в развитии (я предполагаю после перехода с SQLite3 на PostgreSQL).
Когда я запускаю команду граблей, чтобы запустить работников rake resque:work QUEUE=*
Я получаю следующую ошибку и трассировку стека:
getaddrinfo: nodename nor servname provided, or not known
Я получаю следующие ошибки при запуске heroku rake resque:work QUEUE=*
в консоли, чтобы проверить ожидающие работников в очереди.
Class SentimentJob
Arguments [4, 5, 6]
Exception ActiveRecord::StatementInvalid
Error PGError: server closed the connection unexpectedly This probably means
the server terminated abnormally before or while processing the request.
: SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc,
a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid =
d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"taggings"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum
И для моего работника в Facebook:
Class FBConnectionsJob
Arguments 1
Exception OpenSSL::SSL::SSLError
Error SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
certificate verify failed
Class FBConnectionsJob
Arguments 1
Exception ActiveRecord::StatementInvalid
Error PGError: server closed the connection unexpectedly This probably means
the server terminated abnormally before or while processing the request.
: SELECT tablename FROM pg_tables WHERE schemaname = ANY
(current_schemas(false))
Почему я получаю разные ошибки в разных средах? Мои файлы инициализатора выглядят как:
Должен ли я добавить спецификации ENV здесь?
Resque.rb
uri = URI.parse(ENV["REDISTOGO_URL"])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
Redis.rb
uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS
Мой среда/производство.rb Файл не имеет ссылки на Redis и My среда/разработка.rb Файл имеет это для настройки Redis:
ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789'
Решение
Добавление следующего в мой Rakefile исправил для меня аналогичную проблему:
task "resque:setup" => :environment do
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end
Это воссоединяет PostgreSQL, прежде чем Resque Ficks его процесс для создания работника.
Другие советы
Похоже, что ваше приложение не может подключиться к серверу Redis. Предоставляли ли вы действительные детали подключения для производственной среды? Вы доступны Redis Server? Разве это не за брандмауэром, какой -нибудь частная сеть?
Я думаю, что это может быть такой же проблемой с вами Production PostgreSQL Server.
Я изменил инициализаторы на следующее, и теперь он работает на Localhost, поэтому @mirtinciu был прав в отношении соединения сервера. Все еще нужно выяснить, что не так на производственном сервере.
if Rails.env.development?
uri = URI.parse(ENV["REDISTOGO_URL"])
Resque.redis = Redis.new(:host => 'localhost', :port => '6379')
else
uri = URI.parse(ENV["REDISTOGO_URL"])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
end
Я думаю, что это дубликат, и это решается путем восстановления соединения Activerecord:Работники Rails Respe выходят из строя с Pgerror: Сервер неожиданно закрыл соединение