2013-01-14 121 views
22

當我運行jekyll --server我的網站在http://localhost:4000/可用,但是當我部署到GitHub Project Pages時,它可在http://username.github.com/projectname/處獲得。網站根目錄:Github Pages vs.`jekyll --server`

這意味着我不能在引用樣式表和其他資源時使用絕對URL。例如,當相同的佈局被使用時,相對URL會中斷。 index.html2012/01/01/happy-new-year.html。向GitHub Project Pages存儲庫添加樣式表和其他資源的接受/一種好方法是什麼?

交叉過帳到GitHub Issues

+2

請改用相對URL? –

+2

相對網址如果例如中斷,則會中斷。 /index.html和/ 2012/01/01/happy-new-year /使用相同的佈局。 –

+2

如果您的項目根目錄中有一個* assets *目錄,那麼'/ assets/whatever.js'可以在任何地方使用。看到我的答案更詳細。 –

回答

0

我使用jekyll-bootstrap並在端口4000本地部署,但我的github頁面的網址是user.github.com ...我認爲這取決於您最初如何創建回購。最初我使用github提供的自動頁面構建器,它以非常精靈的方式創建了回購。

我只是在遵循如下步驟:

http://jekyllbootstrap.com/

希望幫助

+0

我在說GitHub項目頁面,而不是GitHub用戶頁面。 –

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 

命令行選項覆蓋在LOC在配置文件中的設置al模式。通過這些設置,我可以將所有鏈接指向正確的地方,都以github和本地模式託管。


UPDATE:化身1.0由於化身達到1.0時,aforemetioned選項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變化的細節。

+0

只有糾正,該網址必須使用沒有最後一個「/」 – eveevans

+0

編輯,謝謝你指出。 –

+0

這個'--url'已被棄用。我知道如何解決。有同樣的問題。 –

4

由於--url在命令行中已被棄用,所以還有另一種解決方案。

讓我們假設你的網址路徑是repohttp://name.github.io/repo。現在,在所有環節使用絕對路徑一樣

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

或鏈接

<a href="/repo/license/">License</a> 

你現在需要的是增加--baseurl當你在本地運行命令行。

jekyll --server --baseurl /repo/ 
+0

我找不到文檔中'url'命令行選項的廢棄,但我認爲這個解決方案更好。你能爲此提供一個參考嗎? –

+1

你可以在關於[配置](http://jekyllrb.com/docs/configuration/)的文檔中看到'--url'甚至沒有提到。 –

+0

救生員。我一整天都在做頭飾,而你的回答是唯一有效的工作。需要有更多的文檔/簡單的例子來啓動和運行。謝謝! – scniro

2

傑基爾(1.1.2)的最新版本,我發現這是最好的創建從原來的單獨的配置文件。唯一的區別? url(或baseurl變量)。

默認_config.yml有:

url: myurl.com 

新的配置(可以稱之爲_preview_config.yml):

url: localhost:4000 

這將重新分配取決於您使用什麼樣的配置所有的絕對鏈接。現在運行服務器的預覽配置使用:

jekyll serve -w --config _preview_config.yml 

完整的解釋是在我的blog

+0

+1,除非您使用'jekyll serve --config _config.yml,_preview_config.yml'您可以保留其他設置。在這種情況下,_preview_config.yml只包含url行。 – Gilly

2

要回答你的問題在短期:在_config.yml

添加baseurl: '/project-name'對於CSS/JS鏈接:{{ site.baseurl }}/css/styles.css

對於其它所有環節:{{ site.baseurl }}{{ post.url }}

官方Jeykll GH-頁面答案就在這裏: http://jekyllrb.com/docs/github-pages/

節選:

項目頁面URL結構

有時在將您的gh-pages分支推送到GitHub之前預覽您的Jekyll站點是很好的。然而,GitHub用於Project Pages的類似於子目錄的URL結構使URL的正確解析複雜化了。這是一種利用GitHub項目頁面URL結構(username.github.io/project-name/)的方法,同時保持在本地預覽您的Jekyll站點的能力。

  1. _config.ym升,該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 ''

這種方式,你可以從網站根局部預覽你的網站在本地主機上,但在GitHub上產生從GH-頁面分支頁面的所有網址將開始/project-name和解決正常。

相關問題