Bu yazıyı Roam Research veya Github Pages üzerinden İngilizce okuyabilirsiniz.
Eğer bir Ruby on Rails uygulamasını Heroku Redis eklentisiyle (Hobby Dev planı hariç) bağlamaya çalışırsanız, aşağıdaki hatayla karşılaşma olasılığınız çok yüksek:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error:
certificate verify failed (self signed certificate in certificate chain)
Sebep
Redis 6 ve üzeri sürümleri bağlanmak için TLS kullanılmasını gerektirir. Ancak, Heroku kendi içinde SSL kullanmıyor. SSL’i yönlendirici (router) düzeyinde sonlandırıp, HTTP aracılığıyla istekleri uygulamanıza yönlendirirler ve tüm bunlar Heroku’nun güvenlik duvarının arkasında gerçekleştiği için de bu yöntem güvenlidir. Ayrıca, kabul edelim, Heroku’nun güvenlik önlemleri muhtemelen sizinkinden daha iyidir.
Çözüm
Bunu düzeltmek için Redis istemcinizde (client) OpenSSL::SSL::VERIFY_NONE
kullanmanız gerekecek.
Redis.new(
url: 'url',
driver: :ruby,
ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
)
Sidekiq kullanıyorsanız, yapılandırma (configuration) Sidekiq başlatıcıları (initializers) aracılığıyla yapılmalıdır:
# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end
Sidekiq.configure_client do |config|
config.redis = { ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end
Sık Karşılaşılan Sorunlar
Redis 6 ile hiç hata yok!?
Neden?
Redis sürümünü iki kez kontrol ettiğinizi varsayarsak, plan muhtemelen hem HTTP hem de HTTPS bağlantılarını destekleyen Hobby Dev sürümündedir.
Çözüm
Hobby Dev planı için uygulamanın “Config Vars” bölümünde ayarlanmış iki ortam değişkeni görmelisiniz. Eklentiyi Hobby Dev olarak tutmayı planlıyorsanız, herhangi bir değişiklik yapmanız gerekmez.
Eklentiyi Premium 0 veya üstüne yükseltmeyi planlıyorsanız, yukarıdaki gibi “VERIFY_NONE” kullanmanız gerekir.