Додайте новий шлях до ресурсу в Rails 3.1


78

Хтось знає, як додати ще одну папку до конвеєру активів у Rails 3.1?

Я хотів би служити app/assets/fontsтак само, app/assets/imagesяк подають.


Оновлення: 5-7-2013

Просто для того, щоб додати роз’яснення для майбутніх людей, які знаходять це питання, щоб явно додати шлях до об’єкта, у файлі application.rb:

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

Однак, оскільки вищезазначений шлях підходить, app/assetsвам не потрібно додавати його явно, вам просто потрібно перезапустити програму rails, щоб Зірочки могли її взяти.

Ви повинні явно додати шляху , які знаходяться за межами app/assets, lib/assetsабо vendor/assets, і пам'ятайте , що в той час як Зірочка підхоплює нові файли в папках , які були присутні , коли додаток завантажується, в моєму досвіді це не підібрати нові папки в шляхах активів без перезапуск.


config.assets.paths << "#{Rails.root}/app/assets/active_admin"не працює для мене. Я все ще отримую повідомлення про помилку при спробі переглянути певну сторінку після розгортання до індексування, що .jsфайл у цій папці не скомпільовано.
шістдесят 4 біт

Відповіді:


74

Ендрю, app/assets/fontsнасправді вже у вашому шляху завантаження активів images. Отже, ви можете просто вказати на об’єкт таким же чином: <%= asset_path('/Ubuntu/Ubuntu-R-webfont.eot') %>[1] або як раніше ви посилаєтесь на свої зображення.

Мені знадобився час, щоб обмотати голову і цим. Я до сих пір не знаю , що станеться , якщо є файл з таким же ім'ям в app/assets/fontsі app/assets/images.

[1] Припускаючи, що у вас є шрифт app/assets/fonts/Ubuntu/Ubuntu-R-webfont.eot


21
Для чого це варто, я спробував це, і, здається, це не спрацювало. Потім я здогадався, config.assets.paths << "#{Rails.root}/app/assets/fonts"і це спрацювало. Я думаю, ви праві, що все, що передбачається /assets, повинно бути включено автоматично, але чомусь для мене це дало 404, поки я не додав рядок вище до свого application.rbфайлу. Однак я збираюся прийняти вашу відповідь, тому що я вважаю, що це буде правильно, коли випуск буде доопрацьований, і тому що за допомогою цього коментаря кожен, хто його прочитає, може зрозуміти це :)
Ендрю

39
Я теж натрапив на це, і це працює з налаштуваннями за замовчуванням, АЛЕ каталоги скануються під час ініціалізації програми, тому, якщо ви додасте таку папку, як шрифти, після того, як ваш сервер запущений, ви отримаєте 404. Тому завжди перезапускайте, коли ви додаєте каталог у вашому конвеєрі активів.
Martin Wawrusch

4
Для детальної роботи з однойменними файлами: Коли виникають конфлікти імен, першим шляхом, що з’являється в config.assets.pathsмасиві, є вибраний файл. Цього можна уникнути, використовуючи asset_path()помічник і вказавши каталог.
Джозеф Рейвенвольф

1
зауважте, що проблема з дублікатами імен, як правило, не створює проблем. активи, що обслуговуються, матимуть інший формат, як правило, щоб ця проблема не виникала. Також трубопровід активів дає активам насіння в назві. це A, щоб зламати локальну касу браузера користувача, а також переконатися, що всі файли мають унікальну назву. під час попередньої компіляції (яку ви запускаєте у виробництві) у програмі створюється файл yaml, який пов'язує створені файли з вихідним шляхом. Це дозволяє швидко зв’язати від іменування в коді до складеного імені об’єкта. Це одночасно дозволяє уникнути проблем із дублікатами імен.
yopefonic

На це чудово відповіли тут: stackoverflow.com/a/10907276/1407541
Kopty

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 за відповідь на запитання заголовка замість вирішення проблеми ОП.
nzifnab

config.assets.paths << "# {Rails.root} / app / assets / fonts" працював для мене на Rails
3.2.13

@ dc10 Використання Rails.root.joinповинно бути способом, яким ви це робите, щоб бути гнучким на різних платформах.
ocodo

8

Створюючи app/assets/imagesіapp/assets/fonts вони будуть автоматично додані в шлях активів.

Відкрийте консоль рейок після їх створення та зв’яжіться з:

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за межами назви файлу шрифту


Дякую! Це було причиною активу: помилка попередньої компіляції, яку я почав бачити після додавання шрифтів, що призводить до дуже корисного "граблі перервано! Невизначений метод` match 'для nil: NilClass "
Джефф

Ой! Насправді мою справжню проблему вирішено
Джефф,

2

Я можу підтвердити, що це працює, не додаючи нові шляхи до конфігурації в Rails 3.1.0.rc4 (і, як передбачається, вище). Я відбив свій сервер, ви можете зробити те саме.


1

Створіть assets/fontsпапку та додайте до неї шрифт і використовуйте тему у вашому файлі css, як описано нижче

@font-face {
  font-family: Sawasdee;
  src: url(Sawasdee.ttf);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.