我有一个Rails 4.1应用程序。我想根据环境变量/home
更改REMOTE_USER
的工作方式。
我的routes.rb
文件中有这个文件:
get "home" => Utility.home_page(ENV['REMOTE_USER'])
函数Utility.home_page
返回app1#home
,app2#home
或helps#index
之一,具体取决于其自变量的值。
但是,看来routes.rb
仅被加载一次,因此所有用户最终都被定向到同一应用程序。
答案 0 :(得分:0)
collect_list
实际上是一个routes.rb
文件,因此您可以在此处执行所需的所有验证。
如果您需要根据环境变量的值更改 home 路径,则可以在ruby
中执行以下操作:
routes.rb
答案 1 :(得分:0)
有两个可能的问题:
您正试图从为服务器应用程序而非每个请求设置的ENV变量中获取REMOTE_USER
值。服务器启动后,ENV ['REMOTE_USER']永不更改,并且对所有请求和用户都相同。
您似乎需要从请求环境中获取值:request.env["REMOTE_USER"]
启动应用程序后,Utility.home_page(ENV['REMOTE_USER'])
仅计算一次。您需要根据请求对lambda表达式使用约束。
解决方案可能是这样的:
get "home", to: "app1#home", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "app1#home" }
get "home", to: "app2#home", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "app2#home" }
get "home", to: "helps#index", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "helps#index" }
在这种情况下,我将更改Utility
api使其工作如下:
get "home", to: "app1#home", constraints: lambda { |request| Utility.home_page?(:app1, request.env['REMOTE_USER']) }
get "home", to: "app2#home", constraints: lambda { |request| Utility.home_page?(:app2, request.env['REMOTE_USER']) }
get "home", to: "helps#index", constraints: lambda { |request| Utility.home_page?(:helps, request.env['REMOTE_USER']) }