141 lines
5.4 KiB
Markdown
141 lines
5.4 KiB
Markdown
---
|
|
layout: docs
|
|
title: Upgrading from 0.x to 2.x
|
|
permalink: /docs/upgrading/0-to-2/
|
|
---
|
|
|
|
Upgrading from an older version of Jekyll? A few things have changed in 1.0
|
|
and 2.0 that you'll want to know about.
|
|
|
|
Before we dive in, go ahead and fetch the latest version of Jekyll:
|
|
|
|
```sh
|
|
$ gem update jekyll
|
|
```
|
|
|
|
<div class="note feature">
|
|
<h5 markdown="1">Diving in</h5>
|
|
<p markdown="1">Want to get a new Jekyll site up and running quickly? Simply
|
|
run <code>jekyll new SITENAME</code> to create a new folder with a bare bones
|
|
Jekyll site.</p>
|
|
</div>
|
|
|
|
### The Jekyll Command
|
|
|
|
For better clarity, Jekyll now accepts the commands `build` and `serve`.
|
|
Whereas before you might simply run the command `jekyll` to generate a site
|
|
and `jekyll --server` to view it locally, in v2.0 (and later) you should
|
|
use the subcommands `jekyll build` and `jekyll serve` to build and preview
|
|
your site.
|
|
|
|
<div class="note info">
|
|
<h5>Watching and Serving</h5>
|
|
<p markdown="1">With the new subcommands, the way sites are previewed locally
|
|
changed a bit. Instead of specifying `server: true` in the site's
|
|
configuration file, use `jekyll serve`. The same holds true for
|
|
`watch: true`. Instead, use the `--watch` flag with either `jekyll serve`
|
|
or `jekyll build`.</p>
|
|
</div>
|
|
|
|
### Absolute Permalinks
|
|
|
|
In Jekyll v1.0, we introduced absolute permalinks for pages in
|
|
subdirectories. Starting with v2.0, absolute permalinks are opt-out,
|
|
meaning Jekyll will default to using absolute permalinks instead of
|
|
relative permalinks. Relative permalink backwards-compatibility was removed in v3.0.
|
|
|
|
<div class="note warning" id="absolute-permalinks-warning">
|
|
<h5 markdown="1">Absolute permalinks will be required in v3.0 and on</h5>
|
|
<p markdown="1">
|
|
Starting with Jekyll v3.0, relative permalinks functionality will be removed and thus unavailable for use.
|
|
</p>
|
|
</div>
|
|
|
|
### Draft Posts
|
|
|
|
Jekyll now lets you write draft posts, and allows you to easily preview how
|
|
they will look prior to publishing. To start a draft, simply create a folder
|
|
called `_drafts` in your site's source directory (e.g., alongside `_posts`),
|
|
and add a new markdown file to it. To preview your new post, simply run the
|
|
`jekyll serve` command with the `--drafts` flag.
|
|
|
|
<div class="note info">
|
|
<h5 markdown="1">Drafts don't have dates</h5>
|
|
<p markdown="1">
|
|
Unlike posts, drafts don't have a date, since they haven't
|
|
been published yet. Rather than naming your draft something like
|
|
`2013-07-01-my-draft-post.md`, simply name the file what you'd like your
|
|
post to eventually be titled, here `my-draft-post.md`.</p>
|
|
</div>
|
|
|
|
### Custom Config File
|
|
|
|
Rather than passing individual flags via the command line, you can now pass
|
|
an entire custom Jekyll config file. This helps to distinguish between
|
|
environments, or lets you programmatically override user-specified
|
|
defaults. Simply add the `--config` flag to the `jekyll` command, followed
|
|
by the path to one or more config files (comma-delimited, no spaces).
|
|
|
|
#### As a result, the following command line flags are now deprecated:
|
|
|
|
* `--no-server`
|
|
* `--no-auto` (now `--no-watch`)
|
|
* `--auto` (now `--watch`)
|
|
* `--server`
|
|
* `--url=`
|
|
* `--maruku`, `--rdiscount`, and `--redcarpet`
|
|
* `--pygments`
|
|
* `--permalink=`
|
|
* `--paginate`
|
|
|
|
<div class="note info">
|
|
<h5>The config flag explicitly specifies your configuration file(s)</h5>
|
|
<p markdown="1">If you use the `--config` flag, Jekyll will ignore your
|
|
`_config.yml` file. Want to merge a custom configuration with the normal
|
|
configuration? No problem. Jekyll will accept more than one custom config
|
|
file via the command line. Config files cascade from right to left, such
|
|
that if I run `jekyll serve --config _config.yml,_config-dev.yml`,
|
|
the values in the config files on the right (`_config-dev.yml`) overwrite
|
|
those on the left (`_config.yml`) when both contain the same key.</p>
|
|
</div>
|
|
|
|
### New Config File Options
|
|
|
|
Jekyll 1.0 introduced several new config file options. Before you upgrade,
|
|
you should check to see if any of these are present in your pre-1.0 config
|
|
file, and if so, make sure that you're using them properly:
|
|
|
|
* `excerpt_separator`
|
|
* `host`
|
|
* `include`
|
|
* `keep_files`
|
|
* `layouts`
|
|
* `show_drafts`
|
|
* `timezone`
|
|
* `url`
|
|
|
|
### Baseurl
|
|
|
|
Often, you'll want the ability to run a Jekyll site in multiple places,
|
|
such as previewing locally before pushing to GitHub Pages. Jekyll 1.0 makes
|
|
that easier with the new `--baseurl` flag. To take advantage of this
|
|
feature, first add the production `baseurl` to your site's `_config.yml`
|
|
file. Then, throughout the site, simply prefix relative URLs
|
|
with `{% raw %}{{ site.baseurl }}{% endraw %}`.
|
|
When you're ready to preview your site locally, pass along the `--baseurl`
|
|
flag with your local baseurl (most likely `/`) to `jekyll serve` and Jekyll
|
|
will swap in whatever you've passed along, ensuring all your links work as
|
|
you'd expect in both environments.
|
|
|
|
|
|
<div class="note warning">
|
|
<h5 markdown="1">All page and post URLs contain leading slashes</h5>
|
|
<p markdown="1">If you use the method described above, please remember
|
|
that the URLs for all posts and pages contain a leading slash. Therefore,
|
|
concatenating the site baseurl and the post/page url where
|
|
`site.baseurl = /` and `post.url = /2013/06/05/my-fun-post/` will
|
|
result in two leading slashes, which will break links. It is thus
|
|
suggested that prefixing with `site.baseurl` only be used when the
|
|
`baseurl` is something other than the default of `/`.</p>
|
|
</div>
|