You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails子域名开发环境如何配置reCAPTCHA及dotenv gem

reCAPTCHA本地子域环境配置方案

优先推荐:单组密钥适配所有本地子域

你不需要修改现有.env的单组密钥配置,直接在Google reCAPTCHA控制台将本地开发用的根域mydomain.lh加入允许域名列表即可。reCAPTCHA默认对已添加域名的所有下级子域生效,不会额外校验端口,你配置的blog.mydomain.lh:3000会直接通过校验,不会触发密钥不匹配错误。
保持.env原有配置即可:

RECAPTCHA_SITE_KEY=你申请的reCAPTCHA站点公钥
RECAPTCHA_SECRET_KEY=你申请的reCAPTCHA站点私钥

注意:不要将localhost、127.0.0.1这类环回地址和自定义本地开发域名绑定到同一组reCAPTCHA密钥,部分场景下会触发跨域校验规则导致报错。

多组独立密钥的配置方法

如果你需要给不同子域配置完全独立的reCAPTCHA密钥(比如多站点并行开发),不需要拆分多个.env文件,直接在现有.env文件中用后缀区分不同子域对应的密钥即可:

# 主站对应密钥
RECAPTCHA_SITE_KEY_ROOT=主站公钥
RECAPTCHA_SECRET_KEY_ROOT=主站私钥
# blog子站对应密钥
RECAPTCHA_SITE_KEY_BLOG=blog子站公钥
RECAPTCHA_SECRET_KEY_BLOG=blog子站私钥

之后在项目reCAPTCHA初始化逻辑中,根据当前请求的host动态读取对应的环境变量即可,以Ruby on Rails的初始化配置为例:

# config/initializers/recaptcha.rb
Recaptcha.configure do |config|
  current_host = Rails.application.routes.default_url_options[:host] || request.host
  if current_host == 'blog.mydomain.lh'
    config.site_key = ENV['RECAPTCHA_SITE_KEY_BLOG']
    config.secret_key = ENV['RECAPTCHA_SECRET_KEY_BLOG']
  else
    config.site_key = ENV['RECAPTCHA_SITE_KEY_ROOT']
    config.secret_key = ENV['RECAPTCHA_SECRET_KEY_ROOT']
  end
end

其他Ruby框架逻辑一致:先获取当前访问的域名,再匹配对应环境变量传入reCAPTCHA初始化方法即可。

配置后仍报错的排查项

  • 执行ping blog.mydomain.lh确认hosts配置生效,解析结果指向127.0.0.1
  • 检查reCAPTCHA控制台添加的域名是否为纯域名格式,不要带http://协议头、不要带:3000端口号
  • 修改.env文件后必须重启本地开发服务,dotenv仅在服务启动时加载一次环境变量,运行中不会自动读取新配置
  • 清空浏览器对应域名下的缓存、Cookie与本地存储,旧的reCAPTCHA校验缓存可能导致错误提示残留

内容的提问来源于stack exchange,提问作者Scott K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:09:49