我想在同一台服务器上使用NGINX和Passenger在两个子URI上运行两个Rails6应用程序。根是一个静态的index.html.
索引页从根目录正确加载。访问子URI时,Rails应用程序的根视图也是如此。然而,随后的表单提交throw 404。
当我在root(/(而不是静态索引页上运行这两个应用程序时,它们都运行得很好。
配置文件是启用了站点的文件夹--
server {
listen 80;
server_name _;
passenger_enabled on;
passenger_ruby /usr/bin/ruby;
passenger_app_env development;
location / {
root /var/www/html;
}
location ~ ^/rbf(/.*|$) {
alias /var/www/rails6-bootstrap-flatpickr/public$1;
passenger_base_uri /rbf;
passenger_app_root /var/www/rails6-bootstrap-flatpickr;
passenger_document_root /var/www/rails6-bootstrap-flatpickr/public;
}
location ~ ^/cdb(/.*|$) {
alias /var/www/dashboard/public$1;
passenger_base_uri /cdb;
passenger_app_root /var/www/dashboard;
passenger_document_root /var/www/dashboard/public;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
NGINX访问日志有以下行(我已将我的ip地址替换为aaa.bbb.ccc.ddd(
[19/Nov/2020:12:00:59 +0000] "POST /display_router HTTP/1.1" 404 209 "http://aaa.bbb.ccc.ddd/cdb" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
在开发过程中,我让每个应用程序都在自己的Rails服务器上运行。表格定义为:
<%= form_with(url: "/process_dates") do %>
和
<%= form_with(url: "/display_router") do %>
表单被分别发布到根文件夹/process_dates和/didisplay_router。但在云服务器上,每个应用程序都在自己的文件夹中,该文件夹是rails根目录。
所以我只是把云服务器上的表单定义改成了
<%= form_with(url: "/rbf/process_dates") do %>
和
<%= form_with(url: "/cdb/display_router") do %>
它奏效了。