【问题标题】:How to redirect all traffic to Angular app inside Rails (using Nginx)如何将所有流量重定向到 Rails 内的 Angular 应用程序(使用 Nginx)
【发布时间】:2015-08-11 08:28:59
【问题描述】:

好的,基本上我使用的是 Nginx、Passenger、Rails 和 Angular。我创建了一个编译到 Rails 公用文件夹的 Angular 应用程序。 Rails 在 Angular 应用程序下提供 API。

我希望所有来自www.mydomain.com/admin 的流量都指向位于公共目录中的admin.html 文件。我在 Rails 中有一条路线config/routes.rb 指向admin.html,如下所示:

match     '/admin/*all' => redirect("/admin.html"), via: 'get'

但这似乎并不奏效。我还希望 Nginx 将所有带有 admin/* 的流量重定向到公用文件夹中的这个 admin.html 文件。

顺便说一句,admin.html 是 Angular 应用程序。

编辑:Rails 未提供 Angular 应用程序

目前,Rails 中根本没有视图。 Rails 只是一个独立 Angular 应用程序下的 API,它恰好位于 Rails 应用程序的公共目录中。我在这个阶段选择了这种方法有两个原因:一个我可能会在稍后阶段将 Angular 部署在单独的服务器上,但不是现在。所以保持 Angular 完全独立和分离是一个好主意。第二,目前,将 Angular 置于 Rails 应用程序之上将有助于减少延迟。

整个设置是不断发展的体验的一部分,我希望保持我的选择继续向前发展。

【问题讨论】:

    标签: ruby-on-rails angularjs ruby-on-rails-4 nginx


    【解决方案1】:

    为加载 Angular 应用程序的操作添加路由,然后在 routes.rb 中拥有您的正常资源(可能是 API)

    routes.rb

    match 'admin', to: 'admin#angular', via: :all
    

    admin_controller.rb

    def angular
        render 'layouts/admin'
    end
    

    那么 layouts/admin.html.haml 就是你的 Angular 应用程序

    参考:https://thinkster.io/angular-rails/(顺便说一句非常好的教程)

    【讨论】:

    • 这种方法行不通,因为 Angular 应用程序不是 Rails 的一部分,因为 Rails 不提供 js、css 等。没有layout/admin,因为根本没有布局。 Rails 只是下面的 API(无论如何目前),其中没有任何视图。
    • 您需要通过某个服务器为 Angular 应用程序提供服务,因此我认为您可以使用 Rails 来执行此操作(您可以在没有任何布局的情况下渲染视图 render "someview", layout: false )或者您将使用 Nginx与 rails 分开来为您的 Angular 应用程序提供服务,在这种情况下,您将添加到 nginx 配置的路由,而您的 rails 应用程序内的 routes.rb 将不知道 /admin 路径它只会充当 API
    猜你喜欢
    • 2020-01-07
    • 2016-07-27
    • 2019-07-26
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2012-01-25
    • 2016-05-04
    相关资源
    最近更新 更多