2013-06-15 3 views
3

Я пытаюсь получить Glyphicon, чтобы показать, используя Bootstrap в приложении Rails, но я не могу понять, как его показать. Я прочитал несколько вопросов здесь, пытаясь решить эту проблему, установив путь. Однако, пройдя эти вопросы/ответы, я все еще застрял b/c, глификон не появится.Бутстрап-глификон, не показывающий рельсы приложений - путь?

Оба изображения и таблицы стилей находятся в одном каталоге «Активы». HTML, который я использую, кажется, работает нормально b/c, когда я проверяю элемент в Chrome, он находит соответствующий класс, который ссылается на таблицу стилей Bootstrap.

HTML:

<p><%= link_to raw('<i class="icon-share-alt"></i>'), post %></p> 

CSS (по умолчанию от Bootstrap КРОМЕ Я обновил/IMG к/изображения б/с, что это то, что мой каталог изображений называется):

[class^="icon-"], 
[class*=" icon-"] { 
display: inline-block; 
width: 14px; 
height: 14px; 
margin-top: 1px; 
*margin-right: .3em; 
line-height: 14px; 
vertical-align: text-top; 
background-image: url("../images/glyphicons-halflings.png"); 
background-position: 14px 14px; 
background-repeat: no-repeat; 
} 

Еще один комментарий, который может Помогите. Когда я проверяю элемент на Chrome и наведите указатель мыши на «../ images/glyphics ...» в правой части раздела элемента проверки, Chrome ссылается на localhost: 3000/assets /../ images/glyphicons-halflings.png as путь, который НЕ является правильным путем из корня моего приложения. Я подозреваю, что это просто сокращение в Chrome, но, опять же, кажется странным, что они не приведут правильный путь, если это не корень моей проблемы. Тем не менее, я до сих пор не знаю, как это исправить.

+0

Если вы используете конвейер активов, вы не должны использовать относительные пути в своем CSS. – Wukerplank

+0

@newbie Если один из ответов ниже удовлетворяет вашему вопросу, вы должны отметить его как принятый. Спасибо и добро пожаловать в SO. – tralston

ответ

1

TL; DR: использование самозагрузка-дерзость камня вместо (остальные ниже ответа предлагает бутстраповских-рельсы драгоценных камня, который не так удобно, потому что тогда вам нужна другая зависимость, как МЕНЬШЕ, и он становится немного сложным.

Прежде всего, я должен упомянуть, что есть несколько способов добавить Bootstrap в ваше приложение. Сначала я попробовал ручной путь (что, я подозреваю, это то, что вы делаете) и действительно попал в ту же проблему, что и вы (не уверен, что по той же причине или нет). Итак, я пробовал рекомендованный способ, который через жемчужину называется twitter-bootstra p-rails. Я после этого railscast:

http://railscasts.com/episodes/328-twitter-bootstrap-basics

Тогда я столкнулся с проблемой, однако, не имея другой драгоценный камень - «меньше», который вызывает неприятную ошибку во время выполнения. Итак, я добавил еще два драгоценных камня, в общей сложности три, в мой Gemfile: - gem 'twitter-bootstrap-rails' - gem 'therubyracer' - gem 'less-rails' (отсутствует это было причиной для ошибка времени выполнения).

Их точная роль, о которой я до сих пор не уверен, но они играют важную роль в конвейере Rails. «less» - это то, от чего зависит Bootstrap, по-видимому, вместо «sass», с которым работает Rails.

Итак, после установки их bundle install - те, и другие их зависимости, наиболее заметным libv8 - я получил Bootstrap прекрасно работает, в том числе <i class="icon-share-alt"></i> =)

+0

PS: это была ссылка S/O, в которой описывается проблема, с которой я столкнулся, и которая предложила решение: http://stackoverflow.com/questions/13888381/ruby-on-rails-error-cannot-load-such- file-less – alexakarpov

+0

alex, спасибо за руководство. кажется, что ваше предложение - правильный путь (подкрепленный tralston ниже).Я смотрел рельсы, которые вы процитировали, но, будучи новичком, я, конечно, сразу подумал, что я сломаю, если я просто установлю камень, хотя у меня есть все эти существующие файлы начальной загрузки в моем приложении. Однако я собираюсь просто следовать инструкциям и посмотреть, что произойдет. надеюсь, что я не взорву слишком плохо. еще раз спасибо. – newbie

+0

Нет проблем! Я на самом деле изучаю Rails здесь ... и я только что нашел другой угол атаки. [См. Здесь] (http://ruby.railstutorial.org/chapters/filling-in-the-layout#top). Это отличная (бесплатная) книга Rails, в которой содержится достаточно всего, от git до драгоценных камней, чтобы расслоение на rvm, чтобы сделать новичка комфортным. Я действительно рекомендую это. Но я отвлекся - видимо, там есть еще один камень Ruby, называемый _bootstrap-sass_, который вам нужен, чтобы не беспокоиться об установке _less_ (например, самородка, родная Bootstrap). – alexakarpov

6

Я предполагаю, что вы используете Rails версии 3.1 или новее, так как вы упоминаете папку «активы», которая является частью функции Asset Pipeline Rails. Вкратце, все, что вы помещаете в папку «app/assets» в базе вашего проекта rails, автоматически маршрутизируется в папку assets на вашем сервере.Например:

  • your_app/app/assets/stylesheets/style.css >>>localhost:3000/assets/style.css
  • your_app/app/assets/images/button.png >>>localhost:3000/assets/button.png
  • your_app/app/assets/javascripts/script.js >>>localhost:3000/assets/script.js

Другими словами, рельсы позволяет организовать ваши файлы в исходной папке , но объединяет их все вместе для конечного пользователя в папке assets. Для получения дополнительной информации о трубопроводе активов см. Ruby on Rails Guides: Asset Pipeline.

Ваша проблема в том, что ваш CSS ничего не знает о рельсах, и когда его код интерпретируется в браузере, он видит себя в папке assets. Это также относится к другим изображениям и javascripts, которые у вас есть. Самым простым решением было бы изменить url("../images/glyphicons-halflings.png"); на url("/assets/glyphicons-halflings.png");. Это работает, потому что и файл CSS, и изображение будут видеть друг друга в папке assets при просмотре в браузере.

Вторым решением было бы использовать драгоценный камень сасс-рельсов. Если вы создали свое приложение с использованием метода по умолчанию, вы, скорее всего, найдете его в своем Gemfile. Если это так, то вы можете переименовать свой файл CSS с something.css в something.css.scss (или .css.sass, но я предпочитаю его). Это позволит вам использовать рельсы встроенной поддержки SASS, в частности, следующее:

background: image-url("glyphicons-halflings.png"); 
### Outputs: background: url(/assets/glyphicons-halflings.png); 

image-url команда при использовании в файле .css.scss ваших рельсов приложения будет заботиться о поиске изображения и выводе нужной папки ,

Третий вариант заключается в использовании драгоценного камня twitter-bootstrap-rails, который совместим с конвейером активов в Rails 3.1 или новее.

+0

твердый. самое легкое решение сработало, но я думаю, основываясь на том, что сказал другой ответчик, что «третий вариант» - самый умный. я отвечу на его комментарий выше, но спасибо за то, что дали мне легкое решение и подкрепляли то, что я должен просто использовать жемчужину twitter-bootstrap-rails (хотя я не уверен, что я собираюсь сломать, когда я это сделаю , но установит его и посмотрит, что произойдет). – newbie

1

Для тех, кому интересно, почему иконки не отображаются в режиме производства, попробуйте заменить CSS свойство фоновое изображение с фоном вместо:

background: url(<%= asset_path 'glyphicons-halflings.png' %>); 

... и, возможно, добавить .erb расширение до конца ваш файл boostrap.css, чтобы помощник resource_path работал. Это без использования каких-либо самоцветов.

Подробнее об этом из другого вопроса here.

0

Я нашел это link, чтобы быть очень полезным.

0

См. Это answer. Это лучше, чем изменять файл css, где происходит переход к более новым версиям. Итак, ideia проста, создавайте маршруты к этим файлам или общие с помощью интерпретатора параметров. Другое простое решение помещает эти изображения в «public/img».

Смежные вопросы