我从事my website的开发工作已经有两年了,在此过程中我学到了很多有关JavaScript,CSS,HTML,Bootstrap,Jekyll,Travis-CI和Github Pages的知识。 (长列表是花这么长时间的主要因素。)
我发现了一种使用Travis部署到仓库的gh-pages分支(包含令牌和gem对其进行加密)的巧妙方法,实际上使它成为了我网站的子域。示例:here,here,here。
这非常棒,但是那些子页面最终感觉像它们不是同一网站的一部分,因为它们没有提供返回首页的方法。我希望他们包括我的navbar。
是否有一种优雅的方法?
答案 0 :(得分:0)
我还没有实现此功能,所以还有很多,但我想我已经找到了规范的解决方案,并希望自己记录下来。
所有Github Pages网站都有一个主题。您可以:
_config.yml
文件添加到项目中,当github生成Github Pages网站时,github将尝试读取并遵循该文件。您可以在其中指定theme
,白名单中的一个选项(有限列表)或remote_theme
,任何人都可以创建。这是 great ,因为您可以指定自己的主题。这意味着具有一致的导航栏和主题的方法以及User Pages Site and all my Project Pages Sites中的所有内容都是从用户页面网站中将我的主题挑出到其自己的存储库中,然后从配置文件中的所有其他网站中引用它。
听起来像杂事,但肯定有助于提高可重复性。
我可能还需要在每个项目的顶层指定index.md
,以取代自述文件作为主页,并确保将<head>
之类的内容和导航栏插入其中。
答案 1 :(得分:0)
昨天我终于经历了并完成了what I theorized about in September。 The result lives here now。 despite the documentation trying to be helpful这不是一个容易的过程,因为Jekyll和GitHub页面的交集是一个非常复杂的不透明框,而ruby对我来说并不熟悉。但最终归结为几个重要步骤和陷阱:
您将需要红宝石和几个包裹。 sudo apt install ruby
应该给您ruby
(解释器)和gem
(程序包管理器)。
gem
或bundler
而不是pip
管理,并托管在rubygems.org
而不是pypi
上。就像在Python世界中,每个人都对conda
赞美一样,在Ruby世界中,每个人都对bundler
赞美,gem install
本身就是一颗宝石,您必须gem
因为它没有像bundle install github-pages
本身那样被红宝石包装。我发现捆绑器有故障。当我尝试github-pages
时,它挂起(稍后在Gemfile
上进行介绍)。此外,捆绑程序还依赖于称为requirements.txt
的更多配置文件,这些配置文件与pip
文件bundle exec jekyll serve
{em>可以相似,但不需要 进行摄取。老实说,谁愿意在一个没有复杂依赖树的小型项目中找到更多的杂物?还有谁想jekyll serve
而不是gem
?你在跟我开玩笑吗?只需使用Gemfile
进行安装,然后跳过pip
。与sudo apt install jekyll
类似,我发现越简单越好。github-pages
,则将获得旧版本,例如3.1或类似版本。但是杰基尔是一颗宝石。您可以并且应该使用软件包管理器进行安装。 (但是实际上不要这样做,因为它是gem install jekyll
gem的一部分,而且版本也不相同。稍后会详细介绍。)gem install bundler
(甚至是sudo apt install ruby-dev
)吗?是的,抱歉,我不能这样做,因为缺少一些东西,这里有很长的打印输出。 ... Google,Google ... sudo apt install g++
。哦,抱歉,我 still 无法建立。这是一些 other 错误。 ... Google,Google ... jekyll
。好的, now 可以。对于您来说,此过程可能会略有不同。关键是要建立一个红宝石环境。apt
的情况下那样从命令行调用gem
吗?好吧,很抱歉,我是jekyll
,有时候我没有在您的路线上放gem
。如果您遇到这种情况,请注意sudo ln -s /path/to/jekyll /usr/bin/jekyll
保存gem的位置,在其中找到可执行文件,然后使用assets
将_includes
,_layouts
,_sass
和rubygems.org
从站点移至新的存储库。做完了am您现在有一个远程主题。确实应该那么容易,但是...
.gemspec
,这需要:(1)一个rubygems帐户,(2)您的主题包含remote_theme: user/theme-name
文件,其内容没有得到很好的解释。继续阅读为什么这无关紧要。_config.yml
(Jekyll配置)中添加.gemspec
的信息,但是他们却没有事先告诉您是从某个地方还是从某个地方获取宝石。事实证明,他们正在使用另一个名为jekyll-remote-theme
的gem从存储库中直接提取原始文件,从而完成了编译和上传gem的步骤,并使.css
没人理解或不想看不必要。 (祝你好运。)我只能在benbalter的远程主题gem本身的文档中找到此信息。_config.yml
上的GitHub Pages上没有某些功能。结果,我的前置assets
包含一些Liquid标记,这些标记在我未分离的站点的一部分上可以正常工作,最终在生成的站点中替换了空字符串标记。我最终以hard-coding some variables为主题。_includes
,_layouts
,_sass
和theme
中)(我有一个名为{{1} }包含像我的收藏夹之类的东西。)不要折叠到主题gem或通过GitHub采用的jekyll-remote-theme
机制进行运输。通过仔细修改.gemspec
,可以将这些文件包含在gem中,但是此方法对jekyll-remote-theme
的行为没有影响,因此我最终基本上将所有内容都放在了assets
中。 / li>
在要在主题中呈现项目页面的每个回购的_config.yml
分支的根目录中放置一个包含remote_theme: yourname/yourtheme
的{{1}}。没有Gemfile,没有废话。只需等待它部署。
gh-pages
中查找page.html
文件中的{em} 以呈现_layouts
的内容。如果您有readme
,则可以使用Liquid标签向其中添加头部,导航栏和其他page.html
东西。如果您碰巧忘记了此文件,或者认为Jekyll可以使用_includes
,那么您就错了,并且该主题未应用。不确定post.html
是否可以用作故障转移。无论如何,带有Jekyll的GitHub页面是 super 脆弱的,老实说,我很幸运能够发现它而没有被它阻止,因为(1)我还没有看到任何GitHub文档来准确描述正在调用哪些命令来生成项目页面,(2)您看不到远程编译过程的终端输出**,以及(3),因为您不知道GitHub在做什么,所以没有办法将其复制到本地以查看警告或错误打印输出-这是 if Jekyll甚至就此警告您。default.html
的第15行上的标记include_cached
不是公认的Liquid标记。”但我不记得这是用于哪个版本的,而且我找不到故障记录在任何地方的回购设置中。/_layouts/default.html
分支,从而导致Pages服务器重新构建。但是对于其他站点,我必须进行一些合法的更改或推送一个空的提交。 在您的“用户页面”网站的gh-pages
中添加plugins: - jekyll-remote-theme
和remote_theme: yourname/yourtheme
。
_config.yml
。如果您不是,那么bundler
就像您将安装其他gem一样。此gem实际上是其他大量的Pages服务器实际运行以生成您的静态站点所用的gem,包括gem install github-pages
和jekyll
的相同版本。您将需要这些,以便您可以捕获所有细微的版本或在本地显示错误,并且在云中不会感到惊讶。最后,尽管似乎不需要实际部署,但对于本地执行,您必须确保将jekyll-remote-theme
作为插件添加到利用站点的jekyll-remote-theme
中。否则会出现_config.yml
错误。jekyll serve
而不是gem install jekyll
列表获取Jekyll,则可能会像我一样遇到错误。因此事后看来,这基本上并不难,但是要实现盲目飞行的惨败只是用过于冗长,令人失望的不完整地图来指导您。我希望GitHub可以向您展示某个终端中站点编译和部署的整个过程,就像Travis-CI进行构建一样。我希望Jekyll不会那么复杂。功能太多,无数次失败都会消失。
我希望这项研究可以对其他人有所帮助。