站点根目录:Github Pages与`jekyll --server`

时间:2013-01-14 16:20:57

标签: jekyll github-pages

当我运行jekyll --server我的网站在http://localhost:4000/时可用,但当我部署到GitHub项目页面时,它可以在http://username.github.com/projectname/处获得。

这意味着在引用样式表和其他资源时我不能使用绝对URL。当相同的布局被例如使用时,相对URL中断。 index.html2012/01/01/happy-new-year.html。将样式表和其他资源添加到GitHub项目页面存储库的接受/好方法是什么?

交叉发布到GitHub Issues

5 个答案:

答案 0 :(得分:29)

出现此问题的原因是根目录始终是用户和项目页面中的用户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和本地模式托管。


更新:Jekyll 1.0 由于Jekyll达到1.0,上述选项serverurl及其各自的命令行选项--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的更改的详细信息。

答案 1 :(得分:4)

由于命令行中的--url已被弃用,因此还有另一种解决方案。

假设您{J} {1}}中的网址路径为repo。现在在所有链接中使用绝对URL,如

http://name.github.io/repo

或链接

<link rel="stylesheet" href="/repo/css/syntax.css">

现在您只需要在本地运行命令行时将<a href="/repo/license/">License</a> 添加到命令行。

--baseurl

答案 2 :(得分:2)

在最新版本的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上有完整的解释。

答案 3 :(得分:2)

简要回答您的问题:在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/

摘录:

项目页面网址结构

有时在将gh-pages分支推送到GitHub之前预览您的Jekyll网站会很不错。但是,GitHub用于项目页面的子目录式URL结构使URL的正确解析变得复杂。这是一种利用GitHub项目页面URL结构(username.github.io/project-name/)的方法,同时保持在本地预览Jekyll站点的能力。

  1. _config.ym l中,将baseurl选项设置为/project-name - 请注意前导斜杠和缺少尾部斜杠。例如:baseurl: '/my-proj'

  2. 在引用JS或CSS文件时,请执行以下操作:{{ site.baseurl}}/path/to/css.css - 请注意紧跟在变量之后的斜杠(就在“路径”之前)。

  3. 执行永久链接或内部链接时,请执行以下操作:{{ site.baseurl }}{{ post.url }} - 请注意两个变量之间没有斜杠。

  4. 最后,如果您想在使用jekyll serve提交/部署之前预览您的网站,请确保将空字符串传递给--baseurl选项,以便您可以查看所有内容通常在localhost:4000开头(开头没有/project-name):例如:jekyll serve --baseurl ''

  5. 通过这种方式,您可以从localhost上的站点根目录本地预览您的站点,但是当GitHub从gh-pages分支生成您的页面时,所有URL都将以/project-name开头并正确解析。

答案 4 :(得分:0)

我使用jekyll-bootstrap并在端口4000本地部署,但我的github页面url是user.github.com ...我认为这取决于你最初创建repo的方式。最初我使用了github提供的自动页面构建器,它以非常向导的方式创建了repo。

我只是按照以下步骤操作:

http://jekyllbootstrap.com/

希望有所帮助