Rails-在application.rb中添加了4个自定义资产路径,无需重启

时间:2018-10-18 07:50:20

标签: css ruby-on-rails ruby font-face assets

路轨4

对于下面提到的字体,

@font-face {
  font-family: "Verdana";src: url(/assets/Verdana.ttf) format("truetype");
}

文件位置为 app / assets / fonts (由rails本身加载)

现在,如果我在 app / assets / fonts / client_4 文件夹中拥有此文件,

我必须在application.rb中添加以下内容

config.assets.paths << Rails.root.join('app', 'assets', 'fonts', 'client_4')

Dir.glob("#{Rails.root}/app/assets/fonts/**/").each do |path|
  config.assets.paths << path
end

它与提供为url(/assets/Verdana.ttf)的字体面孔url一起使用,但需要重新启动服务器才能加载application.rb

查询

我的字体文件是由用户上传并存储在app / assets / fonts目录中新创建的client_x文件夹中的。

在这种情况下,我想为该client_x文件夹添加asset_path而不重启服务器。请提出建议。

更新

无论何时创建目录,我都在控制器中添加了以下内容,

MyApplication::Application.config.assets.paths << Rails.root.join('app', 'assets', 'fonts', "client_#{@client.id}/").to_s

然后我通过erb标签在页面中进行了检查,

= puts MyApplication::Application.config.assets.paths.inspect

我得到以下输出,

[
[ 0] "/home/..../app/assets/fonts",
[ 1] "/home/..../app/assets/images",
[ 2] "/home/..../app/assets/javascripts",
[ 3] "/home/..../app/assets/stylesheets",
[ 4] "/home/..../vendor/assets/javascripts",
.
.
[20] "/home/..../app/assets/fonts/client_164/",
[21] "/home/..../app/assets/fonts/client_163/"

]

  1. 第20条路径是由application.rb添加的,并在服务器启动时加载,我确实通过asset_url以字体方式获取字体文件

  2. 第21条路径是由控制器添加的,并且我无法通过asset_url以字体显示字体文件。

如果检查能看到资产中的两个路径,我没有得到,仍然找不到控制器在client_163内添加的字体文​​件的资产URL。我想要它而无需重新启动服务器。请建议eagerload或自动加载可以帮助您。

1 个答案:

答案 0 :(得分:0)

我无法确切获得想要的东西,但找到了替代方法。

我没有在app / assets / fonts /中添加子目录的资产路径。

我使用了完整的网址,例如“#{APP_URL} / assets / client _#{client_id} /#{self [file]}” 产生类似“ http://localhost:3000/assets/client_163/GreatVibes-Regular.otf”的网址

用于开发的APP_URL在development.rb中设置为“ http://localhost:3000”。 类似地添加到舞台和制作中。

最好将变量APP_URL保留在application.yml中(实现figaro gem)并以“#{ENV [APP_URL]}”访问(注意:在.gitignore中添加application.yml)

等待更好的方法。

更新

在演出和制作中,我正在为不安全 https url应用字体,因此,请帮忙。