Пользовательские css-ссылки Rails не работают - следующий урок в http://ruby.railstutorial.org - PullRequest
2 голосов
/ 18 июля 2011

Я новичок в рельсах и пробираюсь к учебнику здесь: http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

Я добавил пакет blueprint css в каталог public / stylesheets и добавил файл custom.css, однако не могу загрузить таблицу стилей. Насколько я понимаю, настройки страницы должны иметь синий фон и некоторые другие небольшие изменения.

В моем файле app / views / layouts / application.html.erb я добавил следующую строку:

<%= stylesheet_link_tag 'stylesheets/custom', :media => 'screen' %>

Что, по моему мнению, должно привести к загрузке css из /public/custom.css.

В руководстве содержание файла custom.css находится в разделе 5.1.2 (извините, я могу опубликовать только 2 гиперссылки здесь) , А содержимое файла app / views / layouts / application.html.erb находится здесь:

http://ruby.railstutorial.org/chapters/filling-in-the-layout#sec:adding_to_the_layout

Когда я просматриваю источник на странице, здесь есть ссылка на файл custom.css:

Но нажатие, которое вызывает сообщение «Ошибка маршрутизации - маршрут не соответствует» /stylesheets/stylesheets/custom.css "»

Насколько я могу судить, я точно следовал руководству, поэтому я не уверен, что не так или что я пропустил. Буду признателен за любую помощь в том, куда идти отсюда.

полный текст файла application.html.erb:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <%= csrf_meta_tag %>
       <!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->    
    <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
    <%= stylesheet_link_tag 'blueprint/print',  :media => 'print' %>
    <!--[if lt IE 8]><%= stylesheet_link_tag 'blueprint/ie' %><![endif]-->
    <%= stylesheet_link_tag 'custom', :media => 'screen' %>
  </head>
  <body>
    <div class="container">
      <header>
        <%= image_tag("logo.png", :alt => "Sample App", :class => "round") %>
        <nav class="round">
          <ul>
            <li><%= link_to "Home", '#' %></li>
            <li><%= link_to "Help", '#' %></li>
            <li><%= link_to "Sign in", '#' %></li>
          </ul>
        </nav>
      </header>
      <section class="round">
        <%= yield %>
      </section>
    </div>
  </body>
</html>

При нажатии ссылки custom.css в источнике по-прежнему возникает та же ошибка:

"Routing Error - No route matches "/stylesheets/stylesheets/custom.css""

Ответы [ 8 ]

5 голосов
/ 18 июля 2011

это происходит на локальном хосте или в производственной среде?Если это производство, то откройте config / production.rb и измените:

config.serve_static_assets = false

на

config.serve_static_assets = true

Если это происходит в среде разработки, то мне интересно, если у вас больше1 файл макета.Убедитесь, что у вас нет application.html.erb и application.html.haml.Также возможно, что у вас есть отдельный макет для ваших постов, который будет называться post.html.haml или что-то в этом роде ...

ТАКЖЕ

вы заявите следующее:*

Если ваш файл custom.css находится в public / custom.css, то он находится не в том месте, он должен быть в public / stylesheets / custom.css

РЕДАКТИРОВАТЬ:

ниже приведен скриншот вашего приложения в том виде, в котором он отображается на моем компьютере; похоже, что он работает нормально после перемещения таблицы стилей в нужную папку.Я также взял на себя смелость удалить public/index.html, но вы можете оставить его пока, пока учебник не посоветует вам удалить его

enter image description here

3 голосов
/ 18 июля 2011

Измените его на stylesheet_link_tag 'custom', :media => 'screen'.Он будет автоматически выглядеть в / public / stylesheets /

1 голос
/ 23 января 2012

У меня была похожая проблема после урока, но она ударила меня в главе 4, где мы сначала включили помощника для файлов чертежей CSS. Я использую Rails v. 3.1.3, и для меня ответ nnaficy решил проблему. Вот описание того, почему это происходит из руководства rubyonrails:

(источник: http://guides.rubyonrails.org/layouts_and_rendering.html)

" 3.1.2 Связывание с файлами JavaScript с помощью javascript_include_tag

Помощник javascript_include_tag возвращает тег HTML-сценария для каждого предоставленного источника.

Если вы используете Rails с включенным конвейером активов, этот помощник сгенерирует ссылку на / assets / javascripts /, а не на public / javascripts, которая использовалась в более ранних версиях Rails. Затем эта ссылка обслуживается гемом Sprockets, который был представлен в Rails 3.1. "

(я скопировал вышеприведенное для объяснения, но специфично для css следующий фрагмент:)

" 3.1.3 Связывание с файлами CSS с помощью stylesheet_link_tag

Помощник stylesheet_link_tag возвращает HTML-тег для каждого предоставленного источника.

Если вы используете Rails с включенным «Asset Pipeline», этот помощник сгенерирует ссылку на / assets / stylesheets /. Затем эта ссылка обрабатывается гемом Sprockets. Файл таблицы стилей может храниться в одном из трех мест: app / assets, lib / assets или vendor / assets. "

поэтому вместо того, чтобы копировать мою папку с чертежами в public / stylesheets /, я скопировал ее в app / assets / stylesheets /, и css сделала свое дело.

1 голос
/ 30 ноября 2011

Так что я не уверен, что вы когда-нибудь поняли это (я уверен, что вы поняли), но у меня была та же проблема, и я нашел решение.Похоже, что rails ищет в / app / assets / stylesheets вместо / public / stylesheets.Я не уверен, правильно ли это работает, но я переместил туда свой файл custom.css, и теперь все работает нормально.

0 голосов
/ 07 августа 2013

Измените строку:

<%= stylesheet_link_tag '/stylesheets/application', :media => 'screen' %>

на

<%= stylesheet_link_tag '/stylesheets/custom', :media => 'screen' %>

Это сработало для меня.

0 голосов
/ 17 июня 2013

Хорошо, так что, может быть, кто-то там все еще борется, я пытался выяснить это некоторое время и решил проблему.Например, @shime говорит, что Rails выглядит в общедоступных таблицах стилей.

application.html.erb
-----------------
`<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
        <%= csrf_meta_tag %>
        <%= stylesheet_link_tag **'screen'**, :media => 'screen' %>
        <%= stylesheet_link_tag **'print'**, :media => 'print'   %>
  </head>
    <body>
     <%= yield %>
    </body>
</html>`

Перемещение screen.css и print.css из таблицы стилей / чертежей в приложение/assets/stylesheets.

0 голосов
/ 11 июля 2012

Тот же вопрос с моим текущим приложением Rails 3.2.6.Я решил это с помощью функции include:

<%= stylesheet_link_tag '/stylesheets/custom', :media => 'screen' %>

Вы должны использовать абсолютные пути вместо относительных.

0 голосов
/ 13 января 2012

Кроме того, для тех, кто все еще работает над проблемой, убедитесь, что вы вставили CSS в нужный проект. У меня была папка «sample_app», в которой я начал учебник. Несколько дней спустя я начал использовать Aptana / RadRails, который создал пользовательскую папку проекта (рабочее пространство). Я не понял и положил все свои CSS в мою первоначальную папку "sample_app". Вот почему Rails не смог найти css / logo!

...