
This article mainly focuses on how to run the rails app in a subdirectory using NGINX. You will learn the reverse proxy of Nginx to serve your rails app.
It was needed because I came to meet a problem in which I want to run a specific part of a website in Ruby on Rails for a specific subdirectory. Β For example, my website is in PHP www.myphpwebsite.com/ and I want to run Ruby on rails site on the same url with different subdirectories like www.myphpwebsite.com/runthisinrubyonrails/. Whenever /runthisinrubyonrails/ detected, It should run on a different servers which is running Β ROR.
Rails give us a simple configuration for this purpose.
In config/application.rb file, add the following code:
module YourAPPName
Β class Application < Rails::Application
Β Β config.relative_url_root = '/runthisinrubyonrails'
Β Β # some other configuration code
Β end
end
In config.ru file:
map Rails::Application.config.relative_url_root || "/" do
Β run Rails.Application
end
we can check everything works fine with click route with /runthisinrubyonrails/ and simple by /.
for example, first asset was getting by www.myphpwebiste.com/assets/favicon.ico now you can try with www.myphpwebsite.com/runthisinrubyonrails/assets/favicon.ico. Both should work because when we have defined that in our config.ru file
Rails::Application.config.relative_url_root || "/"
if relative_url_root found then try with that if not then try with β/β
So we have the following configuration:
upstream unicorn_sock {
Β server your_sock_path;
}
server {
root <path_to_your_rails_app>/public;
location @proxy_rails_app {
Β proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Β proxy_set_header Host $http_host;
Β proxy_redirect off;
Β proxy_pass http://unicorn_sock;
}
location /runthisinrubyonrails/ {
Β alias <path_to_your_rails_app>/public/;
Β try_files $uri @proxy_rails_app;
}
try_files $uri @proxy_rails_app;
# some other configuration code
}