在Rails 3.1中添加新的资产路径


78

有谁知道如何在Rails 3.1中向资产管道添加另一个文件夹?

我想以app/assets/fonts同样的方式app/assets/images服务。


更新:2013年5月7日

只是为了向以后发现此问题的人们提供一些说明,以便在application.rb文件中显式添加资产路径:

config.assets.paths << "#{Rails.root}/app/assets/fonts"

但是,由于上面的路径是在下面,因此app/assets您不必显式添加它,您只需要重新启动Rails应用程序即可,Sprockets可以选择它。

你必须明确地添加是外面的路径app/assetslib/assets或者vendor/assets,只是记得,虽然链轮在存在时,你的应用程序中加载,在我的经验,它不拿起资产路径新的文件夹不夹拿起新文件重新启动。


config.assets.paths << "#{Rails.root}/app/assets/active_admin"对我不起作用。在尝试暂存该.js文件夹中的文件未编译之后尝试查看某个页面时,仍然出现错误。
2014年

Answers:


74

Andrew,app/assets/fonts实际上已经在您的资产加载路径中images。因此,您可以使用相同的方式指向资产:<%= asset_path('/Ubuntu/Ubuntu-R-webfont.eot') %>[1]或参考图像的方式。

我花了好一会儿也把头缠住了。我仍然不知道app/assets/fontsand中是否有一个同名文件会发生什么app/assets/images

[1]假设您在 app/assets/fonts/Ubuntu/Ubuntu-R-webfont.eot


21
对于它的价值,我尝试了一下,但似乎没有用。然后我猜到了config.assets.paths << "#{Rails.root}/app/assets/fonts",那行得通。我认为您是对的,/assets应该自动包含在其中的所有内容,但是由于某种原因,在我将上面的行添加到application.rb文件中之前,它给出了404 。不过,我将接受您的回答,因为我认为发布最终定稿是正确的,并且因为对任何阅读它的人都添加了此注释就可以弄清楚了:)
Andrew

39
我也偶然发现了它,并且它使用默认设置,但是在应用程序初始化期间会扫描目录,因此,如果在服务器运行后添加字体之类的文件夹,则会得到404。因此,在添加资产管道中的目录。
Martin Wawrusch 2011年

4
详细说明同名文件:发生命名冲突时,出现在config.assets.paths数组中的第一个路径是所选文件。可以通过使用asset_path()帮助程序并指定目录来避免这种情况。
Joseph Ravenwolfe

1
请注意,重复的名称问题通常不会造成问题。投放的资产通常具有不同的格式,因此不会发生此问题。资产管道还为资产提供了名称的种子。这是A,用来打破用户浏览器的本地收银机,但同时也要确保所有文件都具有唯一的名称。在预编译(您在生产环境中运行)时,会在应用中创建一个Yaml文件,将生成的文件链接到原始路径。这允许从代码内命名到已编译资产名称的快速链接。这同时避免了重复的名称问题。
yopefonic 2012年

这在这里得到了完美的回答:stackoverflow.com/a/10907276/1407541
Kopty 2013年

43

杰森·安德鲁同意。FWIW我把它放在我的config / application.rb旁边

  # Enable the asset pipeline
config.assets.enabled = true
config.assets.paths << "#{Rails.root}/app/assets/fonts"

15
从我所看到的最好的写作方式来看,现在是Rails.root.join('app', 'assets', 'fonts')
罗斯·艾伦

1
从Google搜寻实际添加新资产路径的方式时有点烦人,并且可接受的答案实际上并未完成任务:p(提问者可能实际上并不需要这样做,但这就是搜索结果)。所以... +1用于回答标题的问题,而不是解决OP的问题。
nzifnab

config.assets.paths << “#{} Rails.root /应用/资产/字体” on Rails的3.2.13为我工作
DC10

@ dc10使用Rails.root.join应该是您这样做的方式,以在各个平台之间保持灵活性。
ocodo

8

通过创建app/assets/imagesapp/assets/fonts它们将被自动添加到资产路径。

创建Rails控制台后,打开它们并检查:

y Rails.application.config.assets.paths 

y是该yaml方法的快捷方式)


3

它可以在不添加路径的情况下工作,但是请注意,您正在使用资产的有效文件名。

url("#{asset_path 'fontawesome-webfont.eot'}?#iefix") format('embedded-opentype'),
...
url("#{asset_path 'fontawesome-webfont.svg'}#FontAwesome") format('svg');

例如,在这种情况下,将?#iefix字体文件名保留在外部


谢谢!这是造成Asset:precompile错误的原因,我在添加字体后开始看到该错误,这导致非常无用的“ rake aborted!nil:NilClass的未定义方法'match'”
Geoff

糟糕!其实我真正的问题是固定的:stackoverflow.com/questions/14775844/...
杰夫

2

我可以确认它可以正常工作,而无需在Rails 3.1.0.rc4中(可能更高)向配置中添加新路径。我跳了我的服务器,您可能会做同样的事情。


1

创建assets/fonts文件夹并在其上添加一些字体并在css文件上使用主题,如下所示

@font-face {
  font-family: Sawasdee;
  src: url(Sawasdee.ttf);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.