Rails开发环境即使重启服务器后仍无法更新HTML/CSS/资源文件

26

我在使用Rails开发网站,一切进展顺利。突然间我对视图和资源进行的更改不再显示出来。我更改了样式表或某些HTML,重新加载浏览器(地址为http://0.0.0.0:3000),但什么都没变。所以我重启了WEBrick服务器,但仍然没有变化,而且即使我完全更改了图片也是如此。

唯一获取新更改的方法是预编译资源:

C:\Users\me\website>rake assets:precompile
C:/Ruby193/bin/ruby.exe C:/Ruby193/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
为什么它显示"production"作为RAILS_ENV?也许我的开发环境不知何故变成了生产环境?但即使是这样,我也不应该需要预编译资产以反映更改。不管怎样,在控制器和erb文件中,Rails.env.development?返回true,Rails.env.production?返回false。
我已经尝试删除我的/tmp目录,但无济于事。
为了使Heroku与compass配合使用,我不得不在config/application.rb中添加以下行:
config.assets.initialize_on_precompile = false

然而,删除那行代码并没有解决我的问题。

5个回答

48

删除 public/assets/ 目录下的所有内容,这里是预编译文件所在之处。如果有预编译文件存在,服务器会直接使用它们而不是通过 Sprockets 处理请求。你可以安全地清空整个目录,然后再试一下。


8
很遗憾,在开发中这对我仍然不起作用。 - Donato

12

我只是想补充一些东西,可以让被接受的答案变得更容易做到。这是我使用的:

rake tmp:cache:clear
rails server

1
我重命名了一个SVG标志,但它在我的视图中没有更新。 rake tmp:cache:clear解决了我的问题。谢谢! - Yoko
在 DEV(开发)环境中,我们居然必须依赖这样的命令,这让我感到难以置信。在这里,人们进行开发,并频繁更新诸如css等资产。Rails应该自动在dev环境下重新编译scss...叹气。 - rails_has_elegance

11

另一种技巧是将public/assets/目录重命名为类似public/assets_hide/的名称。然后在运行"rake assets:precompile"和推送到服务器之前将其改回来。这样可以减少预编译时间,也可以为某些宝石(如rich)保留资产文件权限。

更简单的方法是修改config/environments/development.rb文件:

config.serve_static_assets = false

如果您不使用public/assets目录,那么您就不需要去处理它。但是,如果您正在使用像paperclip这样的工具上传图像文件,那么此方法将无法正常工作,因为图像文件将无法被提供。


4
很明显,如果删除或重命名public/assets/文件夹,则可能还需要重新启动本地服务器并清除浏览器缓存。请注意,不要删除html标签。

1

我曾经遇到过同样的问题(Ruby 3.0和Rails 6.1),我通过删除public/assets/目录并运行以下命令来解决它:

$ rake tmp:cache:clear

$ rake assets:precompile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接