Rails - 4 Custom Asset Path added in application.rb without restart

本小妞迷上赌 提交于 2020-01-03 05:12:21

问题


Rails-4

For font face mentioned below,

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

Location of file is app/assets/fonts (loaded by rails itself)

Now if I have this file in app/assets/fonts/client_4 folder,

I had to add following in application.rb

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

or

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

It worked with font-face url provided as url(/assets/Verdana.ttf), but need to restart server to load application.rb

Query

Case is my font file is uploaded by user and stored in newly created client_x folder present in app/assets/fonts directory.

I want to add asset_path in this case for that client_x folder without restarting server. Please suggest.

Update

I added following in controller whenever directory is created,

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

And I checked following in page by erb tag,

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

And I got following output,

[
[ 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. 20th path is added by application.rb & loaded when server started, I do get font file by asset_url in font-face

  2. 21st path is added by controller and & I do not get font file by asset_url in font-face.

I am not getting if I inspect I can see both path in assets , still I do not get asset url for font files inside client_163 added by controller. I want it without restarting server. Please suggest if eagerload or autoload can help.


回答1:


I could not get exact what I wanted but I found alternative to work with.

I did not add asset path for sub-directories inside app/assets/fonts/.

I worked with complete url like "#{APP_URL}/assets/client_#{client_id}/#{self[file]}" which produce url like 'http://localhost:3000/assets/client_163/GreatVibes-Regular.otf'

Here APP_URL for development is, 'http://localhost:3000' set in development.rb. Similarly added for staging & production.

Better to keep variable APP_URL in application.yml (implementing figaro gem) & accessing as "#{ENV[APP_URL]}" (note: add application.yml in .gitignore)

Waiting for better approach.

Update

In staging & production I am getting font applied for not secure https url so, please help.



来源:https://stackoverflow.com/questions/52869346/rails-4-custom-asset-path-added-in-application-rb-without-restart

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!