Serve Rails API and Ionic mobile website together

前端 未结 1 1965
[愿得一人]
[愿得一人] 2020-12-21 23:02

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

相关标签:
1条回答
  • 2020-12-21 23:39

    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 config:

    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;
      }
    }
    

    In 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
    

    Two birds with one APP :).

    0 讨论(0)
提交回复
热议问题