路由与 rails 中的资产冲突 - 仅在生产中
routing conflict with assets in rails - only on production
在我的路由中,我定义了一个带有一些ID的全局类别来加载动态内容:
get "/:global_category/:id" => "pages#index"
路线位于 routes.rb 的底部 。
一切都很容易,没问题,至少在开发方面。
现在我还通过 CSS 将一些网络字体加载到我的应用程序中,当我在生产时,每当我的字体被加载时我都会收到以下异常:
undefined method `id' for nil:NilClass
受影响的 URL 是:
http://www.example.com/assets/Sansation_Bold-webfont.woff
我将位于 /assets/fonts 中的字体加载到 sass 文件中,如下所示:
@font-face
font-family: 'ApolloASM'
src: url('ApolloASM-webfont.eot')
src: url('ApolloASM-webfont.eot?#iefix') format('embedded-opentype'), url('ApolloASM-webfont.woff2') format('woff2'),url('ApolloASM-webfont.woff') format('woff'),url('ApolloASM-webfont.ttf') format('truetype'),url('ApolloASM-webfont.svg#apollo_asmregular') format('svg')
font-weight: normal
font-style: normal
我的路由和资产管道明显有冲突。
仅在生产环境中(我在 heroku 上部署)我可以重现这个所以我尝试修改我的 production.rb 但是在查看文档后(http://guides.rubyonrails.org/asset_pipeline.html)我仍然不真不知道该怎么办。
我也试过预编译资产。
这似乎不是问题的原因,而且我的字体都已正确加载!
任何提示表示赞赏。
像这样的路由的问题在于它会与您系统上的大量其他路径相匹配。例如,“/users/123”将被解释为 pages#index params={:global_category => "users", :id => 123}
,而您可能一直期望它转到 users#show params={:id => 123}
。
像这样的 Catchall 路由需要靠近 routes.rb 文件的底部,这样它们就不会 "steal" 来自其他路由的路径:路由按以下顺序进行测试出现在文件中。
我使用 sass 帮助程序 "font-url" 解决了它:
@font-face
font-family: 'ApolloASM'
src: font-url('ApolloASM-webfont.eot')
src: font-url('ApolloASM-webfont.eot?#iefix') format('embedded-opentype'), font-url('ApolloASM-webfont.woff2') format('woff2'),font-url('ApolloASM-webfont.woff') format('woff'),font-url('ApolloASM-webfont.ttf') format('truetype'),font-url('ApolloASM-webfont.svg#apollo_asmregular') format('svg')
font-weight: normal
font-style: normal
无需预编译或在 production.rb 或 application.rb 文件中添加任何内容
确保所有字体都存储在/app/assets/fonts目录中。
在我的路由中,我定义了一个带有一些ID的全局类别来加载动态内容:
get "/:global_category/:id" => "pages#index"
路线位于 routes.rb 的底部 。 一切都很容易,没问题,至少在开发方面。 现在我还通过 CSS 将一些网络字体加载到我的应用程序中,当我在生产时,每当我的字体被加载时我都会收到以下异常:
undefined method `id' for nil:NilClass
受影响的 URL 是: http://www.example.com/assets/Sansation_Bold-webfont.woff
我将位于 /assets/fonts 中的字体加载到 sass 文件中,如下所示:
@font-face
font-family: 'ApolloASM'
src: url('ApolloASM-webfont.eot')
src: url('ApolloASM-webfont.eot?#iefix') format('embedded-opentype'), url('ApolloASM-webfont.woff2') format('woff2'),url('ApolloASM-webfont.woff') format('woff'),url('ApolloASM-webfont.ttf') format('truetype'),url('ApolloASM-webfont.svg#apollo_asmregular') format('svg')
font-weight: normal
font-style: normal
我的路由和资产管道明显有冲突。 仅在生产环境中(我在 heroku 上部署)我可以重现这个所以我尝试修改我的 production.rb 但是在查看文档后(http://guides.rubyonrails.org/asset_pipeline.html)我仍然不真不知道该怎么办。
我也试过预编译资产。
这似乎不是问题的原因,而且我的字体都已正确加载! 任何提示表示赞赏。
像这样的路由的问题在于它会与您系统上的大量其他路径相匹配。例如,“/users/123”将被解释为 pages#index params={:global_category => "users", :id => 123}
,而您可能一直期望它转到 users#show params={:id => 123}
。
像这样的 Catchall 路由需要靠近 routes.rb 文件的底部,这样它们就不会 "steal" 来自其他路由的路径:路由按以下顺序进行测试出现在文件中。
我使用 sass 帮助程序 "font-url" 解决了它:
@font-face
font-family: 'ApolloASM'
src: font-url('ApolloASM-webfont.eot')
src: font-url('ApolloASM-webfont.eot?#iefix') format('embedded-opentype'), font-url('ApolloASM-webfont.woff2') format('woff2'),font-url('ApolloASM-webfont.woff') format('woff'),font-url('ApolloASM-webfont.ttf') format('truetype'),font-url('ApolloASM-webfont.svg#apollo_asmregular') format('svg')
font-weight: normal
font-style: normal
无需预编译或在 production.rb 或 application.rb 文件中添加任何内容
确保所有字体都存储在/app/assets/fonts目录中。