代码之家  ›  专栏  ›  技术社区  ›  rlandster

如何根据远程用户更改轨道路线

  •  0
  • rlandster  · 技术社区  · 6 年前

    我有一个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

    然而,似乎 只加载一次,因此所有用户最终都被指向同一个应用程序。

    2 回复  |  直到 6 年前
        1
  •  0
  •   chumakoff    6 年前

    有两个可能的问题:

    1. 你想把 REMOTE_USER 为服务器应用程序而不是每个请求设置的ENV变量的值。一旦服务器启动,ENV['REMOTE_USER']就不会更改,并且对于所有请求和用户都是相同的。

      看起来您需要的是从请求环境中获取值: request.env["REMOTE_USER"]

    2. 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']) }
    
        2
  •  0
  •   Daniel Batalla    6 年前

    routes.rb 实际上是 ruby 文件,以便您可以在其中执行所需的所有验证。

    如果你需要改变 路线.rb

    if ENV['REMOTE_USER'] == 'foo'
      get "home" => 'app1#home'
    
    elsif ENV['REMOTE_USER'] == 'bar'
      get "home" => 'app2#home'
    
    end