我真的很难理解我在 Rails 3 应用程序中看到的路由行为,因为它与乘客和路由辅助方法有关。这是一个快速概述:
当用户注册我的网站时,我想做的一件事是发送一封验证电子邮件,以确保用户提交了有效的电子邮件地址。因此,我设置邮件程序向用户发送带有某种魔法令牌的 URL,从而证明他们已经收到了我发送的电子邮件。电子邮件正文中的 URL 是通过路由辅助方法(在本例中为verify_url("a1b2c3")
)生成的,并且 URL 被适当地填充到电子邮件中,如下所示:
http://localhost:3000/verify/a1b2c3
这一切都很localhost:3000
顺利。因此,就像一个负责任的开发人员一样,我接下来要做的就是将我的应用程序移至我的远程 QA 环境并验证一切是否仍然有效。我的托管服务提供商使用Passenger,我对其进行了设置,以便可以按如下方式访问我的QA环境:
http://my.url/qa
这是通过/qa
在适当的.htaccess
文件中设置 RailsBaseURI 来完成的。因此,我正在尝试在我的 QA 环境中注册该站点,并且我希望辅助方法verify_url
生成以下 URL:
http://my.url/qa/verify/a1b2c3
但是,这是我得到的:
http://my.url/verify/a1b2c3
注意到明显缺乏对“qa”路径的引用吗?我搜索了各种博客和手册来寻找答案,我看到了以下建议:
- 设置环境变量,例如
ENV['RAILS_RELATIVE_URL_ROOT']
- 设置
ActionController::Base.relative_url_root
在我的environment/qa.rb
- 向我添加地图以
config.ru
在特定路径下初始化我的应用程序 - 将我的路线包装在一个范围内
然而,这些似乎要么被弃用(前两个选项),要么最终产生冗余路径信息(后两个选项),如下所示:
http://my.url/qa/qa/verify/a1b2c3
谁能告诉我设置它的正确方法,这样当我打电话时verify_url("a1b2c3")
,我实际上得到了正确的 URL,包括我的 QA 环境的相对路径?理想情况下,我希望能够以environments/qa.rb
某种方式设置它,这样当从一个环境移动到另一个环境时,我根本不需要更改我的应用程序。
提前致谢!