Корень сайта: Github Pages vs. `jekyll --server`
Когда я запускаю jekyll --server
, мой сайт доступен в http://localhost:4000/
, но когда я развертываю его на страницах проекта GitHub, он доступен в http://username.github.com/projectname/
.
Это означает, что я не могу использовать абсолютные URL-адреса при обращении к таблицам стилей и другим ресурсам. Относительные URL-адреса ломаются, когда один и тот же макет используется, например. index.html
и 2012/01/01/happy-new-year.html
. Что такое принятый/a-хороший способ добавления таблиц стилей и других ресурсов в репозиторий проектов Project GitHub?
Перекрестная ссылка на Проблемы GitHub.
Ответы
Ответ 1
Эта проблема возникает из-за того, что корневой каталог всегда является URL-адресом пользователя (user.github.com) на страницах пользователя и проекта. Я нашел решение для этого: Настроить переменную url
в файле _config.yml
на страницу проекта github:
safe: true
...
url: "http://user.github.io/project-name"
тогда в макетах используйте абсолютные ссылки, используя переменную site.url
, чтобы сделать это:
<link rel="stylesheet" href="{{ site.url }}/css/styles.css">
и запустите сервер, используя:
$jekyll --server --url=http://localhost:4000
Опция командной строки перезаписывает параметр в файле конфигурации в локальном режиме. С этими настройками я получаю все ссылки, указывающие на нужное место, оба размещенные в github и в локальном режиме.
UPDATE: Jekyll 1.0. Поскольку Jekyll достиг 1,0, оппоненты server
и url
и соответствующие параметры командной строки --server
и --url
устарели. Инструкции для новой версии:
В файле _config.yml
добавьте переменную baseurl
(без конечной косой черты):
baseurl: "http://user.github.io/project-name"
В макетах или страницах используйте абсолютные ссылки, используя переменную site.baseurl
:
<link rel="stylesheet" href="{{ site.baseurl }}/css/styles.css">
а затем запустите локальный сервер (опция baseurl пуста специально):
$ jekyll serve --watch --baseurl=
Подробнее об изменениях docs.
Ответ 2
Так как --url
в командной строке устарела, есть еще одно решение.
Скажем, ваш URL-адрес repo
в вас http://name.github.io/repo
. Теперь во всех ссылках используются абсолютные URL-адреса, например
<link rel="stylesheet" href="/repo/css/syntax.css">
Или ссылки
<a href="/repo/license/">License</a>
Теперь вам нужно добавить --baseurl
в командную строку при локальном запуске.
jekyll --server --baseurl /repo/
Ответ 3
В последней версии jekyll (1.1.2) мне было лучше создать отдельный файл конфигурации из оригинала. Единственная разница? URL-адрес (или переменная baseurl).
По умолчанию _config.yml имеет:
url: myurl.com
Новая конфигурация (позволяет называть ее _preview_config.yml):
url: localhost:4000
Это приведет к переназначению всех ваших абсолютных ссылок в зависимости от того, какую конфигурацию вы используете. Теперь для запуска сервера с конфигурацией предварительного просмотра используйте:
jekyll serve -w --config _preview_config.yml
Полное объяснение на моем blog.
Ответ 4
Чтобы ответить на короткий вопрос: добавьте baseurl: '/project-name'
в _config.yml
Для ссылок CSS/JS: {{ site.baseurl }}/css/styles.css
Для всех других ссылок: {{ site.baseurl }}{{ post.url }}
Официальный ответ Jeykll GH-Pages здесь: http://jekyllrb.com/docs/github-pages/
Выдержки:
Структура URL страницы проекта
Иногда приятно просмотреть ваш сайт Jekyll, прежде чем нажимать ветвь gh-pages
на GitHub. Тем не менее, подобная каталогам структура URL, используемая GitHub для страниц проекта, усложняет правильное разрешение URL-адресов. Ниже приведен подход к использованию структуры URL-адреса страницы проекта GitHub (username.github.io/project-name/
), сохраняя при этом возможность предварительного просмотра вашего сайта Jekyll локально.
-
В _config.ym
l установите для параметра baseurl
значение /project-name
- отметьте начальную косую черту и отсутствие завершающей косой черты. ex: baseurl: '/my-proj'
-
При обращении к файлам JS или CSS сделайте это так: {{ site.baseurl}}/path/to/css.css
- обратите внимание на косую черту сразу после переменной (непосредственно перед "path" ).
-
При выполнении постоянных ссылок или внутренних ссылок сделайте это так: {{ site.baseurl }}{{ post.url }}
- обратите внимание, что между двумя переменными нет косой черты.
-
Наконец, если вы хотите просмотреть свой сайт перед началом/развертыванием с помощью jekyll serve
, обязательно передайте пустую строку в параметр --baseurl
, чтобы вы могли просматривать все в localhost:4000
обычно (без /project-name
в начале): ex: jekyll serve --baseurl ''
Таким образом, вы можете предварительно просмотреть свой сайт локально с сайта root на localhost, но когда GitHub генерирует ваши страницы из ветки gh-страниц, все URL-адреса начнутся с /project-name
и будут исправлены правильно.
Ответ 5
Я использую jekyll-bootstrap и разворачиваю локально на порт 4000, но мой URL-адрес github - user.github.com... Я думаю, что это зависит от того, как вы первоначально создавали репо. Первоначально я использовал автоматический построитель страниц, который предлагает github, который создал репо в таком же мастере.
Я просто выполнил следующие шаги:
http://jekyllbootstrap.com/
Надеюсь, что поможет