You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails生产环境预编译压缩JS/CSS遇SassC语法错误求助

解决Rails资产预编译与压缩问题

看起来你遇到了两个核心问题:一是常规预编译不压缩资源,二是带环境变量执行时触发Sass语法错误。我们一步步来排查解决:

一、先解决Sass语法错误问题

报错信息SassC::SyntaxError: Error: Invalid CSS after "}": expected 1 selector or at-rule, was '!function(){if("und'明确说明:你的CSS编译流程中混入了JavaScript代码。Sass试图解析JS代码为CSS,自然会报错。

排查步骤:

  1. 定位错误来源
    先执行不压缩的预编译,生成未合并的资产文件,方便找到问题代码:

    RAILS_ENV=production rake assets:precompile --no-compress
    

    然后进入public/assets目录,搜索错误片段!function(){if("und,找到对应的CSS文件,就能定位是哪个源文件引入了JS代码。

  2. 检查资产导入规则

    • 确认app/assets/stylesheets/application.scss中,有没有错误地用//= require引入JS文件?SCSS文件应该用@import导入CSS/SCSS,而JS文件要放在app/assets/javascripts/application.js里用//= require引入。
    • 检查第三方gem或前端库:如果引入的某个库同时包含CSS和JS,确保只导入对应的CSS部分(比如有些库会提供library.css和library.js,不要把JS文件导入到SCSS中)。
  3. 修复错误导入
    找到错误的导入语句后,将JS文件移到JavaScript的入口文件中引入,或者移除SCSS中对JS文件的引用。

二、解决资产不压缩的问题

当常规执行rake assets:precompile不压缩资源时,需要检查生产环境的配置:

  1. 确认production.rb配置
    打开config/environments/production.rb,确保以下配置正确:

    # 关闭实时编译,使用预编译的资产
    config.assets.compile = false
    # 启用JS压缩(依赖uglifier gem)
    config.assets.js_compressor = :uglifier
    # 启用CSS压缩(依赖sassc-rails gem)
    config.assets.css_compressor = :sass
    
  2. 确认gem依赖
    确保Gemfile中包含以下gem(并已安装):

    gem 'uglifier'
    gem 'sassc-rails'
    

    如果这些gem在:development组里,要移到全局或者:production组。

  3. 正确的预编译命令
    你之前的命令SECRET_KEY_BASE= rake secret RAILS_ENV=production rake assets:precompile是错误的——rake secret会生成密钥,但你把它和预编译命令混在一起了。正确的生产环境预编译命令应该是:

    # 先生成密钥(如果还没设置)
    export SECRET_KEY_BASE=$(rake secret)
    # 执行预编译
    RAILS_ENV=production rake assets:precompile
    

    或者直接在命令行一次性执行:

    SECRET_KEY_BASE=$(rake secret) RAILS_ENV=production rake assets:precompile
    

    不要将SECRET_KEY_BASE设为空值,这会导致Rails运行异常。

总结

先解决Sass语法错误(找到混入CSS的JS代码并修正导入),再检查生产环境的压缩配置和gem依赖,最后用正确的命令执行预编译,应该就能顺利完成资产的预编译与压缩了。

内容的提问来源于stack exchange,提问作者Antonio Fergesi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:13:01