Rails:使用带有Asset Pipeline的livereload
铁轨的快速问题在那里有所帮助……
使用Rails 3.0.x应用程序时,我是Guard和LiveReload的重要用户。 但是,似乎在Rails 3.1中使用资产管道时,livereload guard不知道对Sass文件的更改应该触发向浏览器发送新的css。
有人使用LiveReload和Asset Pipeline吗? 如果是这样,你是如何使它工作的?
谢谢!
在Github上关注了一些问题后,我发现以下问题解决了我的问题:
1)确保所有scss文件都按照新的资产约定命名,如下所示: filename.css.scss
我在Rails 3.1之前使用scss并且刚刚命名了所有我的sass文件filename.scss
。
2)在guardfile中使用以下内容进行livereload:
guard 'livereload' do watch(%r{app/helpers/.+\.rb}) watch(%r{app/views/.+\.(erb|haml)}) watch(%r{(public/).+\.(css|js|html)}) watch(%r{app/assets/stylesheets/(.+\.css).*$}) { |m| "assets/#{m[1]}" } watch(%r{app/assets/javascripts/(.+\.js).*$}) { |m| "assets/#{m[1]}" } watch(%r{lib/assets/stylesheets/(.+\.css).*$}) { |m| "assets/#{m[1]}" } watch(%r{lib/assets/javascripts/(.+\.js).*$}) { |m| "assets/#{m[1]}" } watch(%r{vendor/assets/stylesheets/(.+\.css).*$}) { |m| "assets/#{m[1]}" } watch(%r{vendor/assets/javascripts/(.+\.js).*$}) { |m| "assets/#{m[1]}" } watch(%r{config/locales/.+\.yml}) end
我发现以下内容也很好用:
guard :livereload do watch(%r{^app/.+\.(erb|haml|js|css|scss|sass|coffee|eco|png|gif|jpg)}) watch(%r{^app/helpers/.+\.rb}) watch(%r{^public/.+\.html}) watch(%r{^config/locales/.+\.yml}) end
这不是运行guard init livereload
时生成的默认代码,因为某些原因使用sass导入效果不佳。
正如@mirko在他的评论中提到的,不推荐使用scss文件中的额外.css。 所以添加它不是一个很好的解决方案,而且我已经体验到只需添加scss扩展就会强制重新加载页面。
所以我发现这有效:
watch(%r{(app|vendor)(/assets/\w+/(.+)\.(scss))}) { |m| "/assets/#{m[3]}.css" }`
我的理解是这将scss文件映射到已编译的css文件。 我希望它也适用于sass。
资料来源:Github问题
- 如何将TZInfo标识符转换为Rails TimeZone名称/密钥
- 如何从控制器或模型调用ActionCable方法 – “未初始化的常量QuizSession :: App”错误
- 好的,在View中实例化一个对象?
- 错误 – 无法加载’guard / rails-assets’或”查找类Guard :: RailsAssets(Rails 4 / zeus / guard)
- Rails / Bootstrap / HAML – 如何转换此代码以显示闪存消息到HAML?
- Web和Mobile视图最佳实践相同的控制器或命名空间?
- Rails是否带有“未授权”的例外?
- Unicorn Memory Usage几乎填满了所有RAM
- 如何重命名或移动Rails的README_FOR_APP