瞎扯淡 碰到 Assets Pipeline 里的 “幽灵文件”,我被自己给逗乐了

adamshen · 2016年03月23日 · 最后由 jpman 回复于 2016年03月25日 · 2275 次阅读

这个故事是这样的。

我在 assets/javascipts 和 assets/stylesheets 目录下存放了一个 js 文件和一个 css 文件。

为了方便使用,我把这两个文件和一些 helper 方法单独封装成了一个 gem。

接着写了一些东西之后,我删除了这两个文件,修改 Gemfile 加载这个本地 gem。

运行测试之后发现 gem 里的 js 和 css 并没有被成功载入,打开 firebug 发现浏览器确实加载了这两个文件,但是内容却是空白的。

于是我在 assets 里删除了这两个文件的 require,然而这两个空白文件居然还会被加载。

一定是我没有把 rails 目录里的文件删干净,经过检查我确实是删除了这两个文件的。

没办法我只能用 git diff 一点点查到底哪里的改动会导致这个问题,结果,我被自己逗乐了。

原来,在删除了文件以后,我新建了一个 controller,自动生成了 xxx.coffee 和 xxx.sass,而这个 controller 的名字正好和那个文件是一样的。

所以,application 里 require 的优先级应该是 coffee 和 sass 大于 js 和 css 的吧。

宝贵的时间就这么被浪费掉了,唉,不如就泡杯茶,休息一下好了。

补充一个更恶心的事。 如果你不小心用了脚手架,会自动生成一个全局 css 文件,然后会部分覆盖掉你自己的样式。 所以每次生成完都要自己去把 scaffold.css 文件干掉才行。

#2 楼 @msg7086 在 application.rb 中加下面配置,就不会有生成 css, js 了

config.generators do |g|
  g.assets false
end

纯使用命令行看改动的都是高手啊,其实使用界面的 git 工具挺好用啊,我每次提交之前都会仔细在 SourceTree 里面详细检查一下每个文件的变动 (包括看每个文件里面每行的改动),同事也出现了好几次错误都是没有仔细检查的。

所以,application 里 require 的优先级应该是 coffee 和 sass 大于 js 和 css 的吧。

http://guides.rubyonrails.org/asset_pipeline.html#asset-organization 这个才是真正的原因

需要 登录 后方可回复, 如果你还没有账号请 注册新账号