2013-05-21 3 views
13

Es gibt einen Konfig-Parameter in jekyll namens production_url. Ich kann keine Informationen darüber finden, wie man es benutzt.Wie kann man feststellen, ob jekyll lokal oder in der Produktionsumgebung läuft?

Idealerweise möchte ich Permalinks mit lokaler URL erstellen können, wenn es mit serve param und mit Produktions-URL ausgeführt wird, wenn mit build param ausgeführt wird.

Wie könnte ich das tun?

+2

Warum können Sie nicht relative Links verwenden? – Polygnome

Antwort

4

jekyll serve wird jekyll build aufrufen, so dass Sie diese beiden nicht als eine Möglichkeit verwenden können, verschiedene URL-Schemata auszugeben.

Ich baute eine Jekyll-Plugin, das mit einem Flüssigkeitsfilter tut dies und eine benutzerdefinierte Variable in Ihrem _config.ymlmode genannt.

Sie setzen den mode zu Entwicklung oder Produktion und das Plugin kümmert sich um den Rest in Ihren Vorlagen.

in Ihrer Vorlage So könnten Sie eine URL haben wie:

<img src="{{ '/img/dog.jpg' | to_absurl }}" /> 

Wenn mode ist Entwicklung, auf Jekyll bauen/servieren Ihnen ein relativ URL erhalten:

<img src="/img/dog.jpg" /> 

Lokal würde dies wie folgt aufgerufen werden: http://0.0.0.0:4000/img/dog.jpg

Wenn mode ist Produktion, auf Jekyll bauen/dienen und Sie werden absolute URL erhalten:

<img src="http://www.domain.tld/img/dog.jpg" /> 

Die http://www.domain.tld ist, was Sie in _config.yml gesetzt haben ->url Variable.

Sie können mehr Details über das Plugin hier sehen:

http://jhaurawachsman.com/2013/jekyll-url-helper-filter-plugin/

+0

Dies ist ziemlich verschachtelt. Die Antwort von Tommsy64 auf jekyll.environment == "Produktion" funktioniert einwandfrei und ist sauber. – Kamran

23

Ich sehe nicht, die Variable production_url in der aktuellen Version (v1.4.1), so ist dies eine datierte question-- sein kann Aber ich habe selbst nach dieser Antwort gesucht. Es gibt eine baseurl -Eigenschaft, die mit einem Flag gesetzt werden kann und so den Pfad zu Ihren Dateien ändert, aber nur den relativen Pfad anpasst.

jekyll serve --baseurl '/blog' 

Sie können die Option -config verwenden, um eine Konfigurationsdatei für die Entwicklung anzugeben.

Jekyll Documentation

Ihre Produktion Konfigurationsvariablen werden in _config.yml definiert. Eine Option besteht darin, eine separate Konfigurationsdatei für die Entwicklung zu erstellen.

--config _config-dev.yml 

Sie können auch (wie ich) überschreiben Variablen in einer zweiten Konfigurationsdatei definiert.

--config _config.yml,_config-dev.yml 

Wenn Sie die Flüssigkeit Vorlagen für unseren Seiten Links wie folgt verwenden:

<link rel="stylesheet" href="{{ site.base_url }}/stylesheets/blog.css"> 

dann können Sie die base_url Eigenschaft während der lokalen devlopment außer Kraft setzen

base_url:   http://localhost:4000 

und laufen Jekyll in "Entwicklung"

jekyll serve -w --config _config.yml,_config-dev.yml 
+0

Großartige Idee mit einer Override-Konfigurationsdatei. Ich habe eine _config-dev.yml-Überschreibungsdatei erstellt, in die ich "mode: development" geschrieben habe, und es funktioniert perfekt, um zu definieren, wann ich im Entwicklungsmodus bin. Vielen Dank! – levibostian

17

Wenn Sie Ihre Jekyll Website zu bauen, ist es möglich, die Umwelt geben mit dem JEKYLL_ENV Umgebungsvariable für den Build ist mit:

$ JEKYLL_ENV=production jekyll build 

Wenn Sie nicht setzen JEKYLL_ENV explizit, wird standardmäßig für die Entwicklung.

{% if jekyll.environment == "production" %} 
    // Production environment. 
{% endif %} 

Github Pages legt automatisch die Umgebung für die Produktion fest.

1

Das funktioniert auch für mich:

$ JEKYLL_ENV=production jekyll serve 
Verwandte Themen