Rom*_*kin 16 ruby-on-rails ruby-on-rails-7
application.js由于某些未知原因,当我在浏览器中按 F5 时,Rails 7(开发环境)不会自动获取更改。该位置application.js是默认的。我几乎使用默认设置。
当我运行服务器时,它从某个缓存版本中获取 JavaScript。我需要明确地rails assets:precompile使其发挥作用。
导入映射看起来标准:
# Pin npm packages by running ./bin/importmap
pin "application", preload: true
...
Run Code Online (Sandbox Code Playgroud)
布局文件似乎也很标准:
<!DOCTYPE html>
<html>
<head>
<title>Whatever</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="<%= image_path('favicon.svg') %>">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
</head>
...
Run Code Online (Sandbox Code Playgroud)
config.importmap.sweep_cache = true我尝试在我的(根据 importmap 文档)中进行设置development.rb,但似乎没有效果。
此时我非常绝望,无法理解为什么我需要rails assets:precompile在我的开发环境中这样做。
另外,我没有在“localhost”域上运行我的应用程序,它是在类似dev.server-somewhere.com(因此可以从任何地方访问)的 SSH 重定向上运行我的应用程序,类似于 ngrok。不确定这是否是问题的原因。
澄清一下:我正在寻找没有实时刷新功能的功能,只需使用 F5 页面刷新的标准方法即可。
小智 19
我有同样的问题,只需使用:rails assets:clobber清除所有预编译资产。之后热重载将再次开始工作。
如果 Rails 中存在现有的预编译 JS 资源,public/assets/即使在开发模式下也会赋予它们优先级(甚至当 esbuild 或 tsc-watch 正在将源文件转译为 时app/assets/buils/,这与 Sprocket 挂在其旧缓存上无关)
通常,资产仅在生产/部署环境中“预编译”。这意味着默认情况下,您开发时不应该有文件夹public/assets/(Sprockets 在开发模式下为您即时编译资源)。
如果您不小心在开发中运行rails assets:precompile,您将在此处有一个额外的文件夹 ( public/assets/),该文件夹不会签入您的存储库。
但如果它确实存在,那么它的存在会覆盖 Sprocket 的开发模式设置,在每次页面加载时重新编译,迫使您的浏览器从...加载已编译(且过时)的资源。public/assets/
(具有讽刺意味的是,运行rails assets:precompile或rake assets:precompile,虽然它确实强制进行一次性重新编译,并且似乎为您提供了最新的 JS 编译,但在开发中执行此操作通常是导致Sprockets 问题首先陷入困境的原因)
接下来,强制 Sprockets 删除该public/assets/文件夹,然后使用以下命令破坏指纹缓存:
rails assets:clobber
Run Code Online (Sandbox Code Playgroud)
(或者,先运行rails assets:clean然后touch tmp/restart.txt)
要进一步调试,请assets.debug = true在环境文件中进行设置。
| 归档时间: |
|
| 查看次数: |
6434 次 |
| 最近记录: |