Rails / Nginx:路由在dev上不起作用,而在prod上不起作用

问题描述 投票:0回答:1

我的应用程序在我的开发环境中运行完美,但是路由在运行nginx和Passenger的生产服务器中不起作用,我在这里得到:

404 Not Found

但是,索引页面与CSS和JavaScript一样有效。

我以为它与语言环境或i18n问题有关,但是通过更改route.rb以删除:locale,我得到了相同的输出。

路线:

$ rake routes
                   Prefix Verb URI Pattern                                                                              Controller#Action
                          GET  /:locale(.:format)                                                                       welcome#index
                 services GET  /:locale/services(.:format)                                                              welcome#services
                 projects GET  /:locale/projects(.:format)                                                              welcome#projects
                  contact GET  /:locale/contact(.:format)                                                               welcome#contact
                          GET  /:locale(.:format)                                                                       welcome#index
                     root GET  /                                                                                        welcome#index
       rails_service_blob GET  /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET  /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET  /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT  /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

Nginx /启用站点:

server {
        listen 80;
        listen [::]:80;

        root /var/www/test.com/public;

        index index.html index.htm index.nginx-debian.html;

        server_name test.com www.test.com;

    # Turn on Passenger
    passenger_enabled on;
    passenger_ruby /home/ubuntu/.rbenv/versions/2.5.1/bin/ruby;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

我正在使用:-Ruby 2.5.1-gem'rails','〜> 5.2.0'

[production.log显示欢迎页面的呈现,但例如,当尝试去那里时不显示/en/services

I, [2020-02-23T17:08:28.146331 #19532]  INFO -- : [4cd74925-0637-4b92-92aa-12f693691ecb] Processing by WelcomeController#index as HTML
I, [2020-02-23T17:08:28.146998 #19532]  INFO -- : [4cd74925-0637-4b92-92aa-12f693691ecb]   Rendering welcome/index.html.erb within layouts/application
I, [2020-02-23T17:08:28.147227 #19532]  INFO -- : [4cd74925-0637-4b92-92aa-12f693691ecb]   Rendered welcome/index.html.erb within layouts/application (0.1ms)
I, [2020-02-23T17:08:28.148286 #19532]  INFO -- : [4cd74925-0637-4b92-92aa-12f693691ecb] Completed 200 OK in 2ms (Views: 1.4ms)

nginx / error.log:

[ N 2020-02-23 17:13:07.1716 25594/T1 age/Wat/WatchdogMain.cpp:1373 ]: Starting Passenger watchdog...
[ N 2020-02-23 17:13:07.1994 25602/T1 age/Cor/CoreMain.cpp:1340 ]: Starting Passenger core...
[ N 2020-02-23 17:13:07.1995 25602/T1 age/Cor/CoreMain.cpp:256 ]: Passenger core running in multi-application mode.
[ N 2020-02-23 17:13:07.2058 25602/T1 age/Cor/CoreMain.cpp:1015 ]: Passenger core online, PID 25602

nginx / access.log:

[23/Feb/2020:17:14:23 +0000] "GET /favicon.ico HTTP/1.1" 200 0 "http://www.XXX.fr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"
[23/Feb/2020:17:14:28 +0000] "GET /en/services HTTP/1.1" 404 209 "http://www.XXX.fr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"

我该如何解决?

ruby-on-rails ruby nginx http-status-code-404 passenger
1个回答
0
投票
我将从查看您的应用程序的日志文件开始,404响应可能是由堆栈中的许多元素引起的。当您打开应用程序根页面时,您应该会看到一个请求记录到log/production.log文件中(假设这是在生产环境中)。如果看不到它,请在nginx错误日志中查找堆栈(通常,Passenger正在将其用于stderr)。

0
投票
我通过评论nginx conf的“位置”部分来解决:

# location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; # }

© www.soinside.com 2019 - 2024. All rights reserved.