Я не знаю, как работает heroku, но вы можете быть за балансировщиком нагрузки. Вам нужно установить TRUSTED_PROXIES
, чтобы request.remote_ip был HTTP_X_FORWARDED_FOR
адресом.
Вы можете проверить, является ли это вашей проблемой, добавив действие к одному из ваших контроллеров, например так:
def remote_ip
render :text => "REMOTE_ADDR: %s<br/>remote_ip: %s<br/>HTTP_X_FORWARDED_FOR: %s" %
[ request.env['REMOTE_ADDR'],
request.remote_ip,
request.env['HTTP_X_FORWARDED_FOR'] ]
end
Если у вас есть HTTP_X_FORWARDED_FOR
, вам нужно сообщить Rails о доверенных прокси. Как только вы это сделаете, ваши request.remote_ip
и ваши HTTP_X_FORWARDED_FOR
ips будут одинаковыми.
В вашем production.rb
добавьте эти строки, где регулярное выражение allow_ips включает ваши IP-адреса балансировщика нагрузки. Замените a.b.c.
IP-адресами балансировщика нагрузки, которые вы получаете от heroku.
# Setup Trusted Proxies
allowed_ips = /^a\.b\.c\.|^127\.0\.0\.1$|^(10|172\.(1[6-9]|2[0-9]|30|31)|192\.168)\./i
ActionController::Request.const_set("TRUSTED_PROXIES", allowed_ips)