2013-01-25 112 views

回答

21

在生产env中,Rails将不负责提供静态资产。因此,你正在得到这个错误。

config.serve_static_assets = false 

可以设置为真正

或试试这个

rake assets:precompile 

这是通过在配置/环境/ production.rb此设置在您的应用程序控制

命令(编译和复制应用程序/资产中的图像,css和js到public /。

+1

注意*您应该确保这是在生产中设置的,而不是application.rb。刚刚给我造成了一个小时的头痛。 –

+3

Rails 4中的'config.serve_static_files' – rendon

+1

'config.public_file_server.enabled = true'在Rails 5中。建议仅在development.rb中使用,而不是production.rb,因为Web服务器(例如Apache,Nginx)应该为生产。 – CFitz

20

如果您升级到Rails的新版本(想起Rails 4和Rails 3.2.16),并且您突然发现此错误,那么您的样式表很可能指向非指纹,非指纹,缓存的文件版本。如果您正在使用资产管道,为了利用它,您需要使用指向指纹缓存版本文件的新帮助程序。为此,您需要将erb嵌入到您的css文件中,或者使用sass。

不正确的(使用SASS):

.class 
    background: url('asset.png') no-repeat 

正确的(使用SASS):

.class 
    background: image-url('asset.png') no-repeat 

欲了解更多信息,请看这里:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

+2

升级到Rails 3.2.16后,这让我感到困惑,所以它不仅仅是4.x. –

+1

@MarkBerry感谢您的支持。我会更新我的答案以包括该版本。 –

+1

根据文档,人们也可以使用asset-url('yourimage.png'),所以它会出现'图像'添加不起作用 - 只是由语法提琴手强制命名约定更改。当然,我可以在所有我工作的项目中的所有成千上万行css上运行awk脚本,但这可能会在某些无法预料的情况下失败并破坏事情。任何人都知道一个gem恢复了这个和类似语法的原始功能 - 奇思妙想的改变? – JosephK

5

,你必须运行此命令

rake assets:precompile 
7

可能帮助某人,我尝试了所有的答案,并忘记了要做的最基本的事情。清除浏览器缓存,一旦做我是好去:)

+0

这是甚么事?你的建议很有用,但我觉得这很有必要。 – HappyCoder86

0

我一直使用资产的管道,但不得不改变硬编码的URL,我用如下(我的开发环境):

我更新我的/config/application.rb使用资产管道:

config.assets.enabled = true 

我改变了我的所有图片的URL指向“/assets/image_without_old_image_directory_name.jpg”

因此,例如,我的图片用于在/public/images/xxx.jpg中。我将它们移动到/app/assets/images/xxx.jpg。我将img src从/images/xxx.jpg更改为/assets/xxx.jpg

我最终不需要执行资源预编译,只是简单地删除了/ public和in/tmp,它只是工作(用于开发)。

相关问题