Rails资产不会更新

10

我有一个Rails 3.1应用程序,但无论如何更改CSS都不会生效。我已经运行了bundle exec rake assets:precompile一次成功解决了问题,但现在无论怎样都只能使用旧的CSS。

6个回答

17

因为你的资产现在已经预编译了,所以你需要使用以下命令清理它们

bundle exec RAILS_ENV=development rake rails_group=assets assets:clean

嗯,没帮上忙..? /Users/username/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /Users/username/.rvm/gems/ruby-1.9.3-p0/bin/rake assets:clean:all RAILS_ENV=production RAILS_GROUPS=assets 顺便提一下,我提到的问题出现在开发环境中。 - Stpn
1
有没有可能告诉我如何在开发环境中关闭资产预编译,以便可以立即看到所做的 .css 更改? - Stpn
5
删除 public/assets 目录下的所有文件,并停止运行预编译任务!如果 CSS 没有显示,那么我猜这可能是一个升级过的应用程序?在这种情况下,请检查所有配置选项是否与 Rails Pipeline Guide 中的升级部分匹配。 - Richard Hulse
1
这个命令作为一个bundle exec命令不起作用,但是rake assets:clean:all RAILS_ENV=production RAILS_GROUPS=assets对我有用。 - raddrick
我曾经遇到过同样的问题,需要从我的开发配置文件中删除 config.assets.digest = true 才能使资产缓存在资产更改时失效。 - mltsy
如果您使用的是Chrome浏览器,请尝试切换到其他标签页。我和其他人发现有时Chrome会自行使用缓存。 - Joshua Pinter

6

我需要在生产环境中将上述步骤结合起来以重新编译我的资源。

首先,我必须执行以下操作:

rake assets:clean

确保我处于正确的环境中

然后我需要删除预编译创建的public/assets目录(或者只是你需要修复的文件,例如application-<hash>.css

最后重新运行

rake assets:precompile

重启我的Apache服务器(我使用带有Apache的Passenger,未经nginx测试)


5
您可以尝试运行rake assets:clean,然后再运行rake assets:precompile。这将帮助您解决问题。请注意保留HTML标记。

1
做了,但是没有改变(仍然使用旧的CSS)。 - Stpn
2
当我执行这个操作时,注意到错误信息中正在执行的是 rake assets:clean:all RAILS_ENV=production RAILS_GROUPS=assets 任务..一旦我把它切换到 development 模式下,它就正常工作了!:) 谢谢。 - raddrick

3

在Rails、Chrome和Mac中对我有用的方法:

1 - 在终端中:

rake assets:clean

2 - 在Sublime文本编辑器或Finder中:

删除"Public > Assets"文件夹

3 - 在终端中启动本地服务器:

rails s

4 - 在 Chrome 中:

http://localhost:3000/

5 - 如果相关,请重新加载Chrome并清除缓存:

cmd + shift + R

现在,您应该能够在本地主机上更新CSS文件并通过重新加载页面立即看到更改。

请勿在终端中运行“rake assets:precompile”,因为它会重新创建“public”文件夹中的“assets”文件夹,这样您就无法直接在本地主机上查看CSS文件的更新内容。


那个最后的备注是我的解决方案。我在开发环境下运行了rake assets:precompile只是为了测试一下在生产环境下是否一切正常。然后我花了3个小时寻找这个解决方案。谢谢! - Gustavo G.

3

对我来说,只需要从公共目录中删除编译的css/js文件。

结果发现其他开发人员把它放在那里,却没有告诉任何人。


我也必须这样做,但它不是另一个开发人员,而是预编译器。 - OneHoopyFrood

2
如果有未来的谷歌用户看到这个帖子:我在Rails 4.2.8应用程序的测试环境中遇到了相同的问题。以上所有解决方案均无效。在config/environments/test.rb中设置config.serve_static_files = false可以解决问题。
请注意,这只是一个临时解决方法,因为它会导致public文件夹中的所有文件不再被提供(包括404.html、favicon.ico、robots.txt等)。

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