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

升级Ruby 2.0.0至3.3.6及Rails 8.0.0后静态资源加载失败求助

问题:Rails 8.0.0 + Ruby 3.3.6 升级后静态资源加载失败及jQuery UI文件找不到

已完成的升级操作

  • 创建app/assets/config/manifest.js,初始内容:
    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    
    (后续已更新该文件内容)
  • 将gem依赖从turbolinks替换为turbo-rails,修改application.html.erb标签,把data-turbolinks.track改为data-turbo-track:
    <head>
        <title>Numbe Accounting</title>
        <%= stylesheet_link_tag    :application, media: 'all', "data-turbo-track": "reload", defer: true %>
        <%= javascript_include_tag :application, "data-turbo-track": "reload", defer: true %>
        <%= csrf_meta_tags %>
    </head>
    

遇到的问题

1. 静态资源路由错误(生产环境)

服务器启动正常,但CSS、JS、图片无法加载,production.log报错:

ActionController::RoutingError (No route matches [GET] "/stylesheets/application.css"):
  
I, [2025-01-24T15:27:51.990551 #117291]  INFO -- : Started GET "/javascripts/application.js" for 192.168.131.150 at 2025-01-24 15:27:51 +0200
F, [2025-01-24T15:27:51.991099 #117291] FATAL -- :   
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"):
  
I, [2025-01-24T15:27:52.016920 #117291]  INFO -- : Started GET "/images/numbe_accounting.jpg" for 192.168.131.150 at 2025-01-24 15:27:52 +0200
F, [2025-01-24T15:27:52.017929 #117291] FATAL -- :   
ActionController::RoutingError (No route matches [GET] "/images/numbe_accounting.jpg"):

添加sprockets依赖后,错误仍存在。

2. jQuery UI 文件找不到(开发环境)

开发环境运行时报错:

Information for cause: Sprockets::FileNotFound (couldn't find file 'jquery.ui.tabs' with type 'text/css'
Checked in these paths: 
  /var/local/www/numbe_accounting/app/assets/config
  /var/local/www/numbe_accounting/app/assets/images
  /var/local/www/numbe_accounting/app/assets/javascripts
  /var/local/www/numbe_accounting/app/assets/stylesheets
  /var/local/www/numbe_accounting/vendor/assets/javascripts
  /var/local/www/numbe_accounting/vendor/assets/stylesheets
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/turbo-rails-2.0.11/app/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/underscore-rails-1.8.3/vendor/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/jquery-ui-rails-7.0.0/app/assets/images
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/jquery-ui-rails-7.0.0/app/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/jquery-ui-rails-7.0.0/app/assets/stylesheets
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/jquery-rails-4.6.0/vendor/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/coffee-rails-5.0.0/lib/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/actiontext-8.0.1/app/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/actiontext-8.0.1/app/assets/stylesheets
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/actioncable-8.0.1/app/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/activestorage-8.0.1/app/assets/javascripts
  /home/deploy/.rvm/gems/ruby-3.3.6/gems/actionview-8.0.1/app/assets/javascripts):

在Rails控制台执行helper.asset_path("application.js")时,同样提示找不到jquery.ui.tabs文件。

资源目录结构

# tree app/assets
app/assets
├── config
│	└── manifest.js
├── images
│	├── abellard_logo.jpg
│	├── abellard_logo.png
│	├── abellard_SS_logo.png
│	├── false.png
│	├── numbe_accounting.jpg
│	├── numbe_accounting_large.jpg
│	├── tickmark.jpeg
│	├── tickmark.png
│	├── true.png
│	├── x.png
│	├── X.png
│	├── y.png
│	└── Y.png
├── javascripts
│	├── application.js
│	├── journal_types.js.coffee
│	├── license_journal_types.js.coffee
│	└── reports.js.coffee
└── stylesheets
    ├── application.css
    ├── normalize.css
    ├── reports.css.scss
    ├── style.css
    ├── tweaks.css
    └── zcaffolds.css.scss

stylesheets/application.css内容

/*
 *= require_tree .
 *= require_self
 *= require jquery.ui.tabs
 *= require jquery.ui.button
 *= require jquery.ui.datepicker
 * require jquery.ui.accordion
*/

解决方案

一、修复jQuery UI文件找不到的问题

  1. 修正CSS引用路径
    jquery-ui-rails 7.0.0的CSS文件引用规则已变更,需改用组件子路径格式,同时补全缺失的等号:

    /*
     *= require_tree .
     *= require_self
     *= require jquery-ui/tabs
     *= require jquery-ui/button
     *= require jquery-ui/datepicker
     *= require jquery-ui/accordion
    */
    
  2. 确保gem依赖完整
    执行bundle update jquery-ui-rails,确保依赖安装无缺失。

二、修复静态资源路由错误

  1. 配置Sprockets在Rails 8中生效
    Rails 8默认使用Propshaft作为资产管道,若继续用Sprockets需手动配置:

    • 在Gemfile添加:
      gem 'sprockets-rails'
      
      执行bundle install。
    • 在config/application.rb中加入:
      require "sprockets/railtie"
      config.assets.enabled = true
      
    • 重启服务器。
  2. 更新manifest.js配置
    调整app/assets/config/manifest.js内容,明确指定核心资源:

    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    //= link application.css
    //= link application.js
    
  3. 生产环境预编译资源
    执行命令预编译静态资源:

    RAILS_ENV=production bundle exec rails assets:precompile
    

    确认public/assets目录下生成对应编译文件。

  4. 检查生产环境配置
    在config/environments/production.rb中确认:

    config.public_file_server.enabled = true
    config.assets.digest = true
    # 若预编译正常,建议关闭compile;临时调试可设为true
    config.assets.compile = false
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:19:55