由于一些未知的原因,当我在浏览器中按F5键时,Rails 7(开发环境)没有自动拾取application.js
中的更改。application.js
是默认位置。我使用的几乎是默认设置。
当我运行服务器的时候,它会从一些缓存的版本中获取javascript,我需要显式地使用rails assets:precompile
来使它工作。
Importmap看起来很标准:
# Pin npm packages by running ./bin/importmap
pin "application", preload: true
...
布局文件看起来也很标准:
<!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>
...
我试着在我的development.rb
中设置config.importmap.sweep_cache = true
(根据importmap文档),但似乎没有效果。
在这一点上,我非常绝望,不明白为什么我需要在我的开发环境中使用rails assets:precompile
。
另外,我的应用程序不是在"localhost"域上运行的,而是在类似于dev.server-somewhere.com
(所以可以从任何地方访问)的SSH重定向上运行的,类似于ngrok。不确定这是否是问题的原因。
澄清:我正在寻找没有实时刷新功能,只是标准的方法与F5页面刷新将工作。
4条答案
按热度按时间aoyhnmkz1#
我有同样的问题,简单地用途:
rails assets:clobber
清除所有预编译资产。之后,热重载将再次开始工作。如果
public/assets/
中存在已存在的预编译JS资产,那么即使在开发模式下,rails也会为它们提供优先级(例如,即使esbuild或tsc-watch正在将源文件传输到app/assets/buils/
中,这与挂在旧缓存上的Sprocket无关)aiqt4smr2#
我今天就遇到了这个问题,我把链轮换成了X11 E0 F1 X。然后就成功了!你可以看看X11 E1 F1 X。
htrmnn0y3#
我今天遇到了同样的问题,只是简单地恢复到Sprockets和一切工作的方块后,安装宝石.它似乎Sprockets is now optional in Rails 7 .我不知道如果链轮可以与导入Map相结合,虽然.
zf9nrax14#
通常情况下,资产只在生产/部署环境中进行“预编译”,这意味着默认情况下,当您进行开发时,
public/assets/
中不应该有文件夹(Sprockets在开发模式下为您实时编译资产)。如果您在开发过程中意外运行了
rails assets:precompile
,那么这里会有一个额外的文件夹(public/assets/
),它不会签入到您的存储库中。但是如果它确实存在,那么它的存在会覆盖Sprocket的开发模式设置,在每次页面加载时重新编译,迫使浏览器从
public/assets/
加载已经编译(并且***陈旧***)的资产。(具有讽刺意味的是,运行
rails assets:precompile
或rake assets:precompile
,虽然它确实会强制执行一次重新编译,并且看起来会给您提供最新的JS编译,但在开发中这样做通常会首先导致链轮卡住的问题)接下来,强制Sprockets删除
public/assets/
文件夹,然后使用以下命令破坏指纹缓存:(或者,先运行
rails assets:clean
,再运行touch tmp/restart.txt
)要进一步调试,请在环境文件中设置
assets.debug = true
。