Rails 开发环境 asset pipeline 如何实时更新?

suupic · 2011年12月17日 · 最后由 suupic 回复于 2012年02月04日 · 3393 次阅读

每修改一个 css,都需要 precompile 一下才能看到效果,一次 recompile 得半分钟.. 按理说应该不需要这么麻烦 但是看 guides 里也没有这方面的描述

删除目录 public/assets 或者试下 rake assets:clean

开发环境不 precompile 默认就是即时更新的

#2 楼 @Rei
#1 楼 @Psi

之前已试过删除 public/assets 删掉后 application.css/js 都是 404 对比过新建项目的 development.rb,是一致的 我用的是 twitter-bootstrap-rails,不知道跟这个有没有关系

#3 楼 @suupic 你应该再对比一下 config/application.rb 并确认一下 rails 的版本


我之前曾经遇到类似的问题是因为 public/assets 目录下有生成的文件所以直接读取了,删除 public/assets 目录后就正常工作了。你的问题应该是 asset pipeline 没有正常工作

@Psi 我做了 2 个 diff,没有发现那里不对..T 项目是 rails new 出来的,没做修改

** diff config/application.rb /opt/dev/t/config/application.rb **

< #require 'rails/all'
< #
< #用于mongoid
< require "action_controller/railtie"
< require "action_mailer/railtie"
< require "active_resource/railtie"
< require "rails/test_unit/railtie"
< #用于assets pipeline
< require 'sprockets/railtie'
< #队列服务
< require 'resque/server'
---
> require 'rails/all'
22c12
< module Weibo
---
> module T
44,45c34
<     # config.i18n.default_locale = :en
<     config.i18n.default_locale = :zh_CN    
---
>     # config.i18n.default_locale = :de
58,60d46
< 
<     #Used for Devise
<     config.action_mailer.default_url_options = { :host => "yourdomain.com" }

*diff config/environments/development.rb /opt/dev/t/config/environments/development.rb *

1c1
< Weibo::Application.configure do
---
> T::Application.configure do
30d29
<

为了 resque/server, config.ru 改成了

require ::File.expand_path('../config/environment',  __FILE__)
run Rack::URLMap.new "/" => Weibo::Application, "/resque" => Resque::Server.new

请求路径是正确的,说明'sprockets/railtie'被加载了 但是不知道为什么不能生成文件

# config/environments/development.rb
config.assets.compile = true

补充:页面中正确的引入了 css/js,但是渲染模板的时候,日志中并没有任何关于 assets 文件的记录,干干净净。

#7 楼 @Rei
解决了! 原因是在我的 nginx 的配置中有这样一段

location ~ ^/(assets|images|javascripts|stylesheets|system)/  {
    root   /opt/dev/dreamworks/weibo/public/;
    expires max;      
    break;    
}

让 assets 的文件由 nginx 处理,不发送到后端的 unicorn。

这个配置在生产环境没有问题,但对开发环境来说,需要注释掉上面那段 location,再给 development.rb 中加入 config.serve_static_assets = true 这样来让 unicorn 处理 assets 的请求

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