Nevermind, I got it all figured out.

Patrick J. Collins
https://collinatorstudios.com


On Thu, 15 Feb 2024, Patrick J. Collins wrote:

> I have a rails app that is purely an api server, with an angular frontend 
> living under a subfolder in the public directory..  So the server's file 
> structure is like this:
>
> ```
> home/
>   my-app/
>     app/
>       controllers/
>       ..etc
>     config/
>       ..etc
>     public
>       favicon.ico
>       404.html
>       angular-app/
>         index.html
>         12345.js
>         45678.js
>         some-picture.jpg
> ```
>
> I had a wildcard route in my rails app that was manually loading the angular 
> files and serving them, and I am trying to let nginx server them as static 
> files and no longer do this.  The desired behavior that I am looking for is:
>
> * visiting '/api/*' will render the response from the rails server
> * visiting '/' will render the index file inside 
> `public/angular-app/index.html`
> * visiting '/404.html' will render `public/404.html`
> * visiting '/some-picture.jpg' will render 
> `public/angular-app/some-picture.jpg`
>
> it seems that passenger is breaking the behavior that I want...  If I have 
> just a vanilla nginx config that has:
>
> ```
> server {
>   ...
>   root '/home/my-app/public'
>
>   location = / {
>     index angular-app/index.html;
>   }
>
>   location {
>     try_files $uri angular-app/$uri;
>   }
>   ...
> }
> ```
>
> Then the behavior for visiting `/`, `/404.html`, and `/some-picture.jpg` is 
> all perfect...  But to get the rails server stuff to work, I need 
> passenger... and as I add to the config:
> ```
>     passenger_app_root /home/my-app/;
>     passenger_enabled on;
> ```
>
> Then trying to go to anything other than an api route (routes defined in the 
> rails app's config) will result in a 500...
>
> I tried experimenting with restructuring my nginx config to something like:
> ```
> server {
>   ...
>   root '/home/my-app/public'
>
>   location /api/ {
>     passenger_app_root /home/my-app/;
>     passenger_enabled on;
>   }
>
>   location ^/api/ {
>     index angular-app/index.html;
>     passenger_enabled off;
>   }
>   ...
> }
> ```
> And I still end up with 500s going anywhere other than api endpoints...  Does
> anyone one know what I can do to make this work?
>
> Patrick J. Collins
> https://collinatorstudios.com
> _______________________________________________
> nginx mailing list
> nginx@nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx
>
_______________________________________________
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to