新手问题 请问一下关于 rake assets:precompile 的问题

匿名 · 2012年11月02日 · 最后由 jasl 回复于 2012年11月05日 · 8866 次阅读

请问下就是当我执行了 rake assets:precompile 后,然后以 rails s -e production 启动后,大部份页面的显示都是正常的,但是有一小部份的样式却有点问题,与开发环境的显示效果不一样了,就比如是在 development 环境下两个按扭是分开的,但是在 production 环境下却变成了两个直接粘在一起了,请问一下这可能是因为什么原因呢?谢谢 我的环境是 Rails 3.2.5 Javacript 是用的 js.coffee css 是用的 css.scss

有截图吗??

application 之外的 js,css 需要在 production 里面定义预编译的,不然预编译不会处理他们

比如 Ruby China 有 topics.css 和 topics.js 还有 notes.css 这些需要在 production 里面申明

config.assets.precompile += %w(topics.css topics.js notes.css)

清除掉编译后的 asset 再试一次,仅供参考。

NEED_TO_COMPILE_STYLESHEET_EXT = %w(.scss .sass .coffee .erb)
def precompile_assets
  assets = []

  %w(app vendor).each do |source|
    %w(images javascripts stylesheets).each do |kind|
      Dir[Rails.root.join("#{source}/assets/#{kind}/**", ASSET_FORMAT)].each do |path|
        next if File.basename(path)[0] == '_'

        ext = File.extname(path)
        path = path[0..-ext.length-1] if NEED_TO_COMPILE_STYLESHEET_EXT.include? ext

        assets << Pathname.new(path).relative_path_from(Rails.root.join("#{source}/assets/#{kind}"))
      end
    end
  end

  assets
end
config.assets.precompile = precompile_assets

@huacnlee 添加新的 asset 还要修改 production.rb 多麻烦...

我的生产环境下 assets:precompile 遇到了一个奇怪问题:

# ls public/assets/
active_admin                                               glyphicons-halflings.png
application-4910be6f26467f7d670c985739d161c6.css           glyphicons-halflings-white-13553a5bf21ae3cc374006592488ec64.png
application-4910be6f26467f7d670c985739d161c6.css.gz        glyphicons-halflings-white.png
application-72abc2e59b3c30708b3217af1ffddc45.js            main-2c83e14e76ffc3dbf0914f6d6c4d959d.css
application-72abc2e59b3c30708b3217af1ffddc45.js.gz         main-2c83e14e76ffc3dbf0914f6d6c4d959d.css.gz
application.css                                            main.css
application.css.gz                                         main.css.gz
application.js                                             manifest.yml
application.js.gz                                          rails-be8732dac73d845ac5b142c8fb5f9fb0.png
glyphicons-halflings-ab3144065a860d198f1d7d9a4882640c.png  rails.png

可见 rake assets:precompile 已经生效,至少让我感觉上生效了。 但是网站却出现 404 错误。

Failed to load resource: the server responded with a status of 404 (Not Found) 
http://myweb.my/assets/application-4910be6f26467f7d670c985739d161c6.css
Failed to load resource: the server responded with a status of 404 (Not Found) 
http://myweb.my/assets/application-72abc2e59b3c30708b3217af1ffddc45.js

不知道什么原因,反反复复试过多遍。不起作用。 不知道各位有没有遇到过这样的问题? @huacnlee @tiseheaini @jasl @jimrokliu

路径问题,直接访问路径,可以找到文件吗?看看配置中打开 assets pipeline 了吗?

#5 楼 @sandybeauty 你是不是没有配置 web server,直接对 rails 请求资源呢?如果是这样,在生产环境下要开 config.serve_static_assets = true

@woaigithub 直接访问路径报 404,重新弄了一遍,还是不行,现在正在看 assets pipeline,希望能够找到原因,http://guides.rubyonrails.org/asset_pipeline.html

#7 楼 @jimrokliu 我用的是 nginx+unicorn,我的配置为 false,安装注释说明 nginx 不需要打开吧?

# Disable Rails's static asset server (Apache or nginx will already do this)
 config.serve_static_assets = false

是的,这些 asset 文件是通过 nginx 访问的。如果 404 的话,看看你的 nginx 日志,是不是配置的有问题,读取不到这些 asset.

#10 楼 @jimrokliu 不过看到 ruby-china 是 true,有点奇怪。 @huacnlee http://guides.rubyonrails.org/asset_pipeline.html 有个说明是不是问题在这?

#11 楼 @sandybeauty 你管人家用什么,关键你自己要选择什么,选择 true 的都是不用 nginx 的。

@sandybeauty 应该是 nginx 配置有关系 production 下 rails 是不处理静态请求的

#13 楼 @jasl 嗯,应该是 nginx 或 unicorn 的配置问题,因为 public 目录下的任何文件都是 404 错误!正在找问题。

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