本文介绍了一起服务Rails API和Ionic移动网站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基于和,nginx应该可以从Ionic的www文件夹中提供代码。我正在利用使用相同域地址的Rails后端服务它的想法......这样就不会添加任何CORS流量和开销。 Rails WEB的另一个要求是仍然处理网站的桌面(HTML)版本。从本质上讲,将有3种类型的请求进入nginx服务器:

Basing on How to run Ionic serve permanently? and Deploy Ionic as a website, nginx should be able to serve the code from the Ionic's www folder. I am exploiting the idea of serving it with its Rails back-end together using the same domain address... so that no CORS traffic and overhead will be added. Another requirement for the Rails WEB is to still handle the desktop (HTML) version of the website. Essentially, there will be 3 types of requests coming to the nginx server:


  1. 从mobile / www /加载html,js,css文件目录

  2. 移动网站和APP JSON调用Rails API

  3. 桌面网站HTML调用Rails

类型2请求可能很简单,因为它们都具有.json扩展名。子域名是用户名,即username.example.com,任何有关如何让nginx正确路由html,js和css请求的想法?或者这是一个太大的挑战?

Type 2 requests may be simple because they all have the .json extension. With sub-domains are taken by the username, i.e. username.example.com, any ideas on how to have nginx route the html, js, and css requests correctly? Or is this too much of a challenge?

推荐答案

拿#1:想出一个Nginx配置,当Rails返回Ionic文件时以隐藏的方式发出信号。可能很笨拙,所以请随时提出批评,陷阱或改进。

Take #1: Come up with a Nginx config that returns Ionic files when Rails signals it in a hidden manner. May be clumsy, so please feel free to offer criticism, pitfalls, or improvements.

Nginx配置:

server {
  # Development logging
  access_log /home/builder/projects/web/log/access.log;
  error_log /home/builder/projects/web/log/error.log notice;

  listen  80;
  server_name projects.host www.projects.host;

  # Eusure Rails' index route gets uri "/" first.
  index index.html;

  # All API json calls and requests to Rails controllers.
  location ~ ^\/(.+\.json$|others.*|users.*|index\.html$) {

    # Rails server
    proxy_pass  http://127.0.0.1:3000;

    # The Rails server may request Ionic mobile website with a temporary redirect (status 307)
    proxy_intercept_errors on;
    error_page 307 = @temp_redirect;
  }

  # If a temporary redirect is to /mobile_web, response with Ionic mobile root.
  location @temp_redirect {
    if ($upstream_http_location ~ ^http.+\/\/.+\/mobile_web$) {
      set $mobile true;
      root /home/builder/projects/mobile/www;
    }
    # Something else, return it.
    if ($mobile != true) {
      return 307 $upstream_http_location;
    }
  }

  # Ionic mobile root
  location / {
    root        /home/builder/projects/mobile/www;
  }
}

在RoR中:

  # Decide whether to handle the root action within Rails app or to
  # signal the downstream server (nginx) to return Ionic mobile web.
  def index
    # TODO: Needs a bit of logic before the following redirect.
    redirect_to '/mobile_web', status: :temporary_redirect  # 307
  end

两只鸟有一个APP:)。

Two birds with one APP :).

这篇关于一起服务Rails API和Ionic移动网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 19:40