Rails-没有路线与[GET]“ /index.html”匹配(对于所有路线)

时间:2019-12-07 18:47:40

标签: ruby-on-rails apache passenger

我正在尝试将我的Rails应用程序第一次部署到暂存环境中。我很确定这是Apache / Passenger的问题,但是我不确定该在哪里修复它。我可能只需要在conf文件中添加一条规则,但是我不知道该规则是什么。也许是某种重写规则,因为它似乎是在寻找文件而不是解析路由?

问题是:对于每条单一路线,它似乎都将其“在幕后”转换为“ /index.html”-无论我尝试使用“ / api / v1”还是“ / api / v1 / users”,还是“ / api / v1 / channels / authorize”(或其他任何文件)。

apache2 / access.log文件似乎显示正确传递的路由:

[07/Dec/2019:18:23:15 +0000] "GET /api/v1/channels/authorize HTTP/1.1" 500 41024 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

并且apache2 / error.log文件没有显示任何错误。


这是我的conf文件。我正在使用别名在两个单独的应用程序之间进行解析(/ api / *转到Rails后端,其他所有内容转到VueJS前端-我知道我可以将客户端嵌入到Rails公用目录中,但是我我出于自己的原因这样做)。

<VirtualHost *:443>
    ServerName <my url>
    DocumentRoot /path/to/client

     # configure error logs
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

     # Passenger config stuff
    PassengerEnabled off
    PassengerRuby /path/to/ruby
    PassengerAppEnv development
    PassengerStartTimeout 400


     # if the route matches https://<domain>/api/*
      # then point to the Rails API app
      # (and use Passenger to serve it)
    Alias /api /path/to/railsapp/public
     # configuration for the /api routes
      # basically just enable Passenger and tell it where to point to
    <Location /api>
        PassengerEnabled on
        PassengerBaseURI /
        PassengerAppRoot /path/to/railsapp
    </Location>
    <Directory /path/to/railsapp/public>
        Allow from all
        Options -MultiViews
        Require all granted

#       RailsEnv test
    </Directory>

     # for EVERYTHING ELSE, point to the VueJS client app
    <Location />
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule . /index.html [L]
    </Location>

     # and of course enable SSL and point to the certs
    SSLEngine on
    SSLCertificateKeyFile /path/to/key
    SSLCertificateFile /path/to/cert
    SSLCertificateChainFile /path/to/chain-file

</VirtualHost>

这是我第一次对乘客做任何事情。我只是尝试从网上找到的示例中整理出一些东西,但是很可能我一路上错过了一些东西。

2 个答案:

答案 0 :(得分:0)

尝试将PassengerBaseURI /下的<Location /api>更改为PassengerBaseURI /api

答案 1 :(得分:0)

所以我知道了。以下代码块中的resample_data <- tibble( training_sets = map(indices, ~ extracted[.x, ]), testing_sets = map(indices, ~ extracted[-.x, ]) ) 将应用于所有内容:

RewriteRule

(Vue中的每条路线都被改写回index.html文件-但Rails不会这样做)。

因此,在最终弄清楚我可以简单地将<Location / > RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.html [L] </Location> 添加到规则集中以排除对RewriteCond的所有调用之前,我尝试了一些不同的工作

所以新的块是:

api/*

只有一行我要添加到apache conf文件中,以使其正常工作。