首先向各位大神说声 sorry,因为本帖的技术含量真的不高。
进入正题, 1、在做 rails 的时候,如果我在 app/views/xxx/xxx.html 创建文件(非.erb 文件),在发布之后还是会被 rails 进行再次编译,有没有什么办法可以不让 rails 编译静态文件(非资源目录)。
2、rails 在编译的时候,原则是什么?
希望得到解答
注:如果答案不是三言两语就能说明白,请附上资料链接,再次谢过~!
.html 视图文件应该是不会被编译的吧,原样输出就是了。 编译也只是 assets 目录下的静态资源文件比如 css,图片,js 脚本 等 会被处理并且文件名会被增加上指纹信息。
找到对应路由,放在 public 目录
做缓存?
1 不叫编译,是解析。模板引擎会去找那个文件,虽然你写 .html 结尾,它默认按照 erb 读取解析。具体可以看看 \ https://github.com/rtomayko/tilt 2,静态文件都放到 public 下,或者 vendor/assets/javascripts/ vendor/assets/stylesheets/
#1 楼 @shinefine 情况是这样的,比如我在 app/views/xxx/xxx.html 文件源码是
<!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="stylesheets/bs/bootstrap.min.css"> <!--[if lt IE 9]> alert('Hey,哥们,换个浏览器吧,我懒到没写兼容包-_-!!'); window.top.opener=''; window.top.close(); </script> <![endif]--> </head> <body> </body> </html>
而发布之后通过浏览器查看源码就变成了如下
<html> <head></style> <title>Bbs</title> <link data-turbolinks-track="true" href="/assets/application-89eb8c2051810ff68041626843d0d71d.css" media="all" rel="stylesheet"> <script data-turbolinks-track="true" src="/assets/application-904efb7268b445af06ea1dfb13b497aa.js"></script> <meta content="authenticity_token" name="csrf-param"> <meta content="o6MqhDHPXUTDzl55epmtEbMWzzMETBHvYWtlxRcC/uo=" name="csrf-token"> </head> <body> <!--[if lt IE 9]> alert('Hey,哥们,换个浏览器吧,我懒到没写兼容包-_-!!'); window.top.opener=''; window.top.close(); </script> <![endif]--> </body></html>
区域别在于 rails 给添加了一个 head 标签,并且把以前的 html 内的全部作为 body 内容了。这个是因为 rails 的解释规则导致的么?
#4 楼 @liwei78 ,麻烦你帮我看看 5 楼,是因为 rails 解释的时候就会这样么?原理是什么呢
#6 楼 @iml6yu 因为默认加载 layout 了 在 controller 里,layout false, only: 不需要 layou 的 action 名字
#7 楼 @loveltyoic #4 楼 @liwei78 #1 楼 @shinefine #2 楼 @zhangyuan #3 楼 @yfractal
感谢各位~! 7 楼是我想要的答案。谢谢大家了,是我问的不对,所以导致大家没有明白我的意图。