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

想法?

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设置了环境变量。然后将提供公共目录中的文件,而 catch all 路线不会捕获它们。

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