......这很有道理。我在自定义CMS中使用catch all route进行页面路由。但是我仍然想在我的公共文件夹中访问用户上传的资源。我的路线如下:
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所有路由中添加一个异常吗?
思想?
答案 0 :(得分:4)
如果您的服务器配置正确,通常静态文件将优先于Rails生成的内容。
注意不要将相对于应用程序的路径(例如/public/images/test.png
)与相对于Web根目录的路径混淆,后者为/images/test.png
。这种相互冲突的“路径”定义让很多开发人员感到困惑。
答案 1 :(得分:1)
在Rails 5上,默认生产配置通过环境变量标志启用公共文件服务器。将enabled
值直接设置为true
或确保设置RAILS_SERVE_STATIC_FILES
环境变量。然后将提供公共目录中的文件,而catch catch all route将不会捕获它们。
# config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?