Ruby on rails Rails捕获所有路由阻止访问公用文件夹

Ruby on rails Rails捕获所有路由阻止访问公用文件夹,ruby-on-rails,ruby,rails-routing,Ruby On Rails,Ruby,Rails Routing,。。。这是有道理的。我在一个定制的CMS中使用的是“全覆盖”的页面路由。但是,我仍然希望访问我的公用文件夹中用户上载的资产。我的路线如下: match "(*url)" => 'pages#show' 我的控制器执行以下操作: def show @page = Page.where(:url => ['/', params[:url]].join).first begin render :template => "templates/" +

。。。这是有道理的。我在一个定制的CMS中使用的是“全覆盖”的页面路由。但是,我仍然希望访问我的公用文件夹中用户上载的资产。我的路线如下:

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,但我想知道是否有更好的rails方法——例如,我可以向catch all路由添加一个异常吗


想法?

如果服务器配置正确,通常静态文件优先于Rails生成的内容


注意不要将与应用程序相关的路径(如
/public/images/test.png
)与与与web根目录相关的路径(即
/images/test.png
)混淆。“路径”的这种相互冲突的定义让许多开发人员感到困惑。

在Rails 5上,默认的生产配置通过环境变量标志启用公共文件服务器。将
enabled
值直接设置为
true
,或者确保设置了
RAILS\u SERVE\u STATIC\u FILES
环境变量。然后将提供公共目录中的文件,而catch-all路由不会捕获它们

# config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

静态文件应该优先于Rails,但它们似乎没有。。尝试访问的/public/images/dinner.jpeg时,我仍在点击控制器example@tadman哦,糟糕,我不应该在url中包含public。访问/images/dinner.jpeg可以正常工作。如果你写下你的回答,我会接受的。