Dies ist ein häufiges Problem zwischen verschiedenen Jekyll-Umgebungen.
Einige Erklärungen
Wir müssen verstehen site.url
und site.baseurl
in welcher Situation wir sie brauchen. Diese Variablen dienen nicht demselben Zweck.
site.url
Standardmäßig wird diese Variable nur im Seitenkopf für den canonical
Header und den verwendet RSS link
. Es wird auch im XML-Feed verwendet, um auf Site-Ressourcen zu verweisen, da die Software, die diesen Feed verwaltet, die URLs der Ressource nicht kennt.
Diese Variable ist nur für externe Systeme erforderlich.
site.baseurl
Diese Variable gibt den Stammordner Ihrer Jekyll-Site an. Standardmäßig ist es auf ""
(leere Zeichenfolge) eingestellt. Das bedeutet, dass Ihre Jekyll-Site die Wurzel von ist http://example.com
.
Wenn Ihr Jekyll Website Leben in http://example.com/blog
Sie setzen müssen , site.baseurl
um /blog
( beachten Sie den Schrägstrich ). Dadurch können Assets (CSS, JS) korrekt geladen werden.
Sehen Sie, wie Assets in Ihren Kopf geladen werden:
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
das kann auch sein:
<link rel="stylesheet" href="{{ site.baseurl }}/css/main.css">
Arbeiten in verschiedenen Umgebungen
Jetzt müssen Sie Ihre Site lokal testen und in der Produktion bereitstellen. Manchmal ist das baseurl
anders und das jekyll build
funktioniert in einer dieser Umgebungen möglicherweise nicht sofort.
Hier haben wir zwei Lösungen:
Verwenden jekyll serve
Stellen wir uns vor, Ihre Site befindet sich in einem Github-Repository und wird dort bereitgestellt https://username.github.io/myProject
.
Sie können Setup die baseurl
zu /myProject
. und testen Sie Ihre Site lokal mit jekyll serve
, Ihre Site wird unter bereitgestellthttp://127.0.0.1:4000/myProject/
Verwenden Sie mehrere Konfigurationsdateien
Wenn Sie aus dem einen oder anderen Grund nicht verwenden können jekyll serve
, können Sie eine Konfigurationsdatei für beide Umgebungen und jekyll build
je nach Bereitstellungsort festlegen .
Nehmen wir an, wir haben den lokalen Standort http://localhost
und den Produktionsstandort https://username.github.io/myProject
.
Wir verlassen das _config.yml
mit url: https://username.github.io
undbaseurl: /myProject
Wir erstellen eine neue _config_dev.yml
mit nur url: https://localhost
undbaseurl: ""
Jetzt vor Ort testen:
jekyll build --config _config.yml,_config_dev.yml
oder
jekyll build --config _config.yml,_config_dev.yml --watch
Wenn die Produktion jekyll build
aktiviert ist , verwendet der Befehl die Standardeinstellung _config.yml
.
site.url
um den CSS / JS-Ressourcen vorangestellt zu werden. Ist das eine schlechte Idee? Sollte ich alles ändernsite.baseurl
undsite.url
nur für kanonische Links und XML-Feeds verwenden?{{site.baseurl}}/asset
für Vermögenswerte und{{site.url}}/{{site.baseurl}}/ressource
für externe Bedürfnisse. Und vielleicht können Sie meine Antwort genehmigen.{{ site.url }}{{ site.baseurl }}
stattdessen dasite.baseurl
schon ein vorangestellter Schrägstrich?{{ site.url }}{{ site.baseurl }}
./blog
URL angehängt? Ich bekomme immer noch die kaputte URL des Beitrags wie/2014/12/12/mypost-name
. Es hat tatsächlich den Link gebrochen, da ich alles im Blog-Ordner habe.