The Precognition

Личный блог Николая Ситала

Pelican публикация сайта на Github


Перевод части статьи How I Build This Site - Part 7 , автор «Peter Kazarinoff»


Измените файл publishconf.py для использования github pages url

Нам необходимо отредактировать publishconf.py и добавить наш github pages url в SITEURL и установить RELATIVE_URLS в True. Строки для изменения:

#publishconf.py
SITEURL = 'https://username.github.io/staticsite'
RELATIVE_URLS = True

Убедитесь, что вы установили username вашего github user name. RELATIVE_URLS = True. Это необходимо для работы ссылок на сайте и запуска css и javascript файлов на github pages. Когда я в начале установил RELATIVE_URLS = False, сайт выглядел ужасающе, без форматирования css и без каких-либо рабочих ссылок. Установка RELATIVE_URLS = True, исправила эту проблему.

Создайте опубликованную версию сайта

До этого момента мы использовали команду make html для сборки демо версии нашего сайта. Сейчас мы готовы опубликовать наш сайт. Мы публикуем наш сайт запуском команд:

(staticsite) $ pelican content -s publishconf.py

Это создает опубликованную версию сайта с относительными путями в директории output.

Add, commit, push в ветку main на github

Перед тем как мы сможем разместить версию нашего сайта на github pages, нам необходимо сохранить текущую версию на ветку main.

(staticsite) $ git add .
(staticsite) $ git commit -m "first published version"
(staticsite) $ git push origin main

Создание gh-pages ветки в нашем репозитории статического сайта на github

До этого момента, мы сохранили нашу работу в ветку main в репозитории staticsite на github. Чтобы разместить сайт на github pages, на необходимо создать новую ветку в репозитории staticsite с названием gh-pages. В ветке main все еще находится наш код, настройки, разметки файлов, блокноты, изображения и так далее для создания сайта. Однако, на ветке gh-pages репозитория staticsite repo любой html, css или файлы javascript будут обслуживаться как обычный вебсайт. Чтобы создать новую ветку, перейдите на главную страницу репозитория staticsite github и нажмите в раскрывающемся меню [Branch: Main] в верхнем левом углу. Введите имя новой ветки: gh-pages.

Используйте ghp-import чтобы отправить содержимое в директорию output в ветку gh-pages

Как показано в документации Pelican, вы можете использовать Python пакет с названием ghp-import чтобы помочь опубликовать содержимое каталога output в ветке gh-pages нашего репозитория на gitgub. Если ghp-import еще не инсталлирован используйте pip. Убедитесь, что вы находитесь в виртуальном окружении среды python, когда вы запускаете pip.

(staticsite) $ pip install ghp-import

Теперь мы будем использовать ghp-import пакет, который поможет нам опубликовать сайт. Команда ghp-import output назначит содержимое каталога output на ветку gh-pages нашего локального репозитория. Мы отправляем push содержимое локальной ветки gh-pages в удаленную ветку gh-page на github.

(staticsite) $ ghp-import output
(staticsite) $ git push origin gh-pages

У меня были проблемы с этими командами. В зависимости от компьютера который я использовал. Я бы получил следуюшую ошибку:

! [rejected]        gh-pages -> gh-pages (fetch first)
error: failed to push some refs to 'https://github.com/professorkazarinoff/staticsite.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Я пытался выполнить git stash но это не работало. Я также пытался git pull origin gh-pages но это закончилось тем, что все было помещено из директории output в мой корневой каталог staticsite и привело к большому беспорядку.

Способ которым я обошел это было использование -f (force) флаг. Я не думаю что это наиболее элегантный или предпочтительный путь передать содержимое контента output каталога в ветку gh-pages. Я просто действительно не понимаю как git работает достаточно хорошо, чтобы знать, как обойти проблему без forced commit. Если вы получаете ошибку попробуйте:

(staticsite) $ pelican content -s publishconf.py

(staticsite) $ git add .
(staticsite) $ git commit -m "published"
(staticsite) $ git push origin main

(staticsite) $ ghp-import output
(staticsite) $ git push -f origin gh-pages

Что работало до сих пор для меня.

Посмотрите сайт на github pages

Потрясающе! Теперь сайт размещен и доступен к просмотру для всех. Довольно круто верно? Укажите в браузере URL-адрес страниц github и посмотрите:

https://username.github.io/staticsite