Rails 6 未在开发中使用 Sprocket/Assets 重新编译 SCSS

问题描述

我有一个偶尔会返回的 Rails 6 应用程序。它对 JS 使用 webpacker,对 CSS 使用 Sprockets(我认为这是认设置)。如果相关,我正在 WSL 上开发 - 文件在 Ubuntu 文件系统中,Rails 在 Ubuntu 中运行,编辑正在远程使用 VSCode 进入 WSL。

今天,在开发环境中运行,我对其中一个 SCSS 文件进行了更改并刷新了我的页面。服务的 CSS 没有更新; Sprockets 没有重新编译它。停止并重新启动服务器并没有提示重新编译(我真的没想到它会......)。

bin/rails assets:precompile 确实再生了;但我不希望在开发过程中必须这样做。

如何让 Rails 在开发中的链轮资产管道中重新编译已更改的 SCSS?


我认为应该相关的文件和设置的摘录:

app/assets/config/manifest.js

//= link_tree ../images
//= link_directory ../stylesheets .css

app/assets/stylesheets/application.scss

/*
 *= require_tree .
 *= require_self
 */
...

app/assets/stylesheets/ 还包含 characters.scss,这是我修改文件

app/views/layouts/application.html.slim

doctype html
html
  head
    = csrf_Meta_tags
    = csp_Meta_tag
    = stylesheet_link_tag 'application',media: 'all','data-turbolinks-track': 'reload'
...

config/environments/development.rb

...
  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = false
  config.assets.compile = true

# ^-- also fails if compile = false
...

Gemfile.lock

...
    rails (6.0.3.2)
      actioncable (= 6.0.3.2)
      actionmailBox (= 6.0.3.2)
      actionmailer (= 6.0.3.2)
      actionpack (= 6.0.3.2)
      actiontext (= 6.0.3.2)
      actionview (= 6.0.3.2)
      activejob (= 6.0.3.2)
      activemodel (= 6.0.3.2)
      activerecord (= 6.0.3.2)
      activestorage (= 6.0.3.2)
      activesupport (= 6.0.3.2)
      bundler (>= 1.3.0)
      railties (= 6.0.3.2)
      sprockets-rails (>= 2.0.0)
    sass-rails (6.0.0)
      sassc-rails (~> 2.1,>= 2.1.1)
    sassc (2.4.0)
      ffi (~> 1.9)
    sassc-rails (2.1.2)
      railties (>= 4.0.0)
      sassc (>= 2.0)
      sprockets (> 3.0)
      sprockets-rails
      tilt
    sprockets (4.0.2)
      concurrent-ruby (~> 1.0)
      rack (> 1,< 3)
    sprockets-rails (3.2.1)
      actionpack (>= 4.0)
      activesupport (>= 4.0)
      sprockets (>= 3.0.0)
...

解决方法

看起来我的设置是正确的,但我没有意识到 Rails 会更喜欢存在预编译资源。

在我运行 bin/rails assets:clobber 删除编译版本后,它又回到了实时更新状态。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...