4

...それは理にかなっています。カスタム CMS でページ ルーティングに catch all ルートを使用しています。ただし、パブリック フォルダーにあるユーザーがアップロードしたアセットには引き続きアクセスしたいと考えています。私のルートは次のとおりです。

match "(*url)" => 'pages#show'

そして、私のコントローラーはこれを行います:

def show
    @page = Page.where(:url => ['/', params[:url]].join).first
     begin
        render :template => "templates/" + @page.template.slug
     rescue
        render "public/404.html"
     end
end

これで、おそらくコントローラーで URL を解析できることがわかりましたが、より良いレールの方法があるかどうか疑問に思っていました。たとえば、キャッチオールルートに例外を追加できますか?

考え?

4

2 に答える 2

4

サーバーが正しく設定されていれば、通常、Rails で生成されたコンテンツよりも静的ファイルが優先されます。

/public/images/test.pngアプリケーションからの相対パスと、Web ルートからの相対パスなどを混同しないように注意してください/images/test.png。この「パス」の矛盾する定義は、多くの開発者を混乱させてきました。

于 2013-03-19T16:27:35.447 に答える
2

Rails 5 では、デフォルトの運用構成では、環境変数フラグによってパブリック ファイル サーバーが有効になります。enabled値を直接設定trueするか、RAILS_SERVE_STATIC_FILES環境変数が設定されていることを確認してください。次に、パブリック ディレクトリ内のファイルが提供され、代わりにすべてをキャッチするルートはそれらをキャッチしません。

# config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
于 2017-06-03T01:33:33.307 に答える