在控制器中检测基地 url?

Detect base url in controller?

我们如何检测控制器中的根/基url?

我是一个 运行 函数,需要知道 return 用户在完成后去哪里,我希望它在开发和生产环境中工作。目前,如果我简单地使用域名,那么在开发过程中它会将用户 return 发送到实际网站(即 www.example.com/reauth,而不是 http://localhost:3000),这是不可取的(在 dev 中,用户应该returned 到 dev;他们不应该 链接到网站的生产版本。

所以我想要 returns:

的代码

例子

这是具体示例的简化版本,我需要将 refresh_url 的值设置为:

注意这里的关键是 url 的后半部分是相同的,但第一部分 (base url) 是生产中的实际域,以及开发中的 localhost。

Stripe::AccountLink.create({
    refresh_url: 'https://www.example.com/reauth'
  })

到目前为止我所知道的

我看过:

我发现 method here 有效。

request.base_url

备注:

  • 这将 return url 没有尾部正斜杠。
  • 这在 rails 控制台中不起作用

为了将来参考,这里是我根据应用程序是 运行 开发还是生产来给出正确基础 url 的解决方案:

base_url = (!Rails.const_defined? 'Console') ? (request.base_url) : "http://localhost:3000"