我一直在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
为什么将生产显示为 RAILS_ENV?也许我的开发环境以某种方式变成了生产环境?但即便如此,我也不需要预编译资产来反映更改。无论如何,在控制器和 erb 文件中
Rails.env.development?
返回 true
并且 Rails.env.production?
返回 false
。
我尝试删除我的 /tmp 目录,但没有成功。
我必须将以下行添加到 config/application.rb 才能让 Heroku 使用指南针:
config.assets.initialize_on_precompile = false
但是,删除该行无论如何都无法解决我的问题。
删除
public/assets/
目录的内容。这就是预编译文件所在的位置,如果存在,它们就会被提供服务,而不是将请求传递给 Sprockets。您可以安全地对整个目录进行核武器攻击,然后一切就会恢复正常。
我只是想添加一些东西,可以使接受的答案更容易做到。这是我使用的:
rake tmp:cache:clear
rails server
另一种技术是将 public/assets/ 目录重命名为 public/assets_hide/ 之类的名称。然后在运行“rake asset:precompile”并推送到服务器之前将其重命名。这减少了预编译时间,并且还保留了某些 gem 的资源文件权限,例如 rich,它会复制资源。
更简单的方法是将 config/environments/development.rb 文件修改为:
config.serve_static_assets = false
那么你就不需要搞乱 public/assets 目录了。但是,如果您使用回形针之类的东西上传图像文件,则这将不起作用,因为不会提供图像文件。
可能对每个人来说都是显而易见的,但只是想补充一点,如果删除或重命名 public/assets/ 文件夹,您可能还需要重新启动本地服务器并清除浏览器缓存:-)
我遇到了同样的问题(Ruby 3.0 和 Rails 6.1),我通过删除
public/assets/
目录然后运行来解决它:
$ rake tmp:cache:clear
$ rake assets:precompile
即使删除资产文件夹后,我也无法看到样式更新。
我正在 ruby 3.1.3 docker 容器中运行我的 Rails 7 应用程序。
为我解决的问题是在开发配置文件中设置以下值。
config.assets.debug = true