323 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| ---
 | ||
| title: Troubleshooting
 | ||
| permalink: /docs/troubleshooting/
 | ||
| ---
 | ||
| 
 | ||
| If you ever run into problems installing or using Jekyll, here are a few tips
 | ||
| that might be of help. If the problem you’re experiencing isn’t covered below,
 | ||
| **please [check out our other help resources](/help/)** as well.
 | ||
| 
 | ||
| - [Installation Problems](#installation-problems)
 | ||
| - [Problems running Jekyll](#problems-running-jekyll)
 | ||
| - [Base-URL Problems](#base-url-problems)
 | ||
| - [Configuration problems](#configuration-problems)
 | ||
| - [Markup Problems](#markup-problems)
 | ||
| - [Production Problems](#production-problems)
 | ||
| 
 | ||
| ## Installation Problems
 | ||
| 
 | ||
| If you encounter errors during gem installation, you may need to install
 | ||
| the header files for compiling extension modules for Ruby 2.x This
 | ||
| can be done on Ubuntu or Debian by running:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo apt-get install ruby2.3-dev
 | ||
| ```
 | ||
| 
 | ||
| On Red Hat, CentOS, and Fedora systems you can do this by running:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo yum install ruby-devel
 | ||
| ```
 | ||
| 
 | ||
| If you installed the above - specifically on Fedora 23 - but the extensions would still not compile, you are probably running a Fedora image that misses the `redhat-rpm-config` package. To solve this, simply run:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo dnf install redhat-rpm-config
 | ||
| ```
 | ||
| 
 | ||
| On Arch Linux you need to run:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo pacman -S ruby-ffi
 | ||
| ```
 | ||
| 
 | ||
| On Ubuntu if you get stuck after `bundle exec jekyll serve` and see error
 | ||
| messages like `Could not locate Gemfile` or `.bundle/ directory`, it's likely
 | ||
| because all requirements have not been fully met. Recent stock Ubuntu
 | ||
| distributions require the installation of both the `ruby` and `ruby-all-dev`
 | ||
| packages:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo apt-get install ruby ruby-all-dev
 | ||
| ```
 | ||
| 
 | ||
| On [NearlyFreeSpeech](https://www.nearlyfreespeech.net/) you need to run the
 | ||
| following commands before installing Jekyll:
 | ||
| 
 | ||
| ```sh
 | ||
| export GEM_HOME=/home/private/gems
 | ||
| export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/
 | ||
| export PATH=$PATH:/home/private/gems/bin
 | ||
| export RB_USER_INSTALL='true'
 | ||
| ```
 | ||
| 
 | ||
| To install RubyGems on Gentoo:
 | ||
| 
 | ||
| ```sh
 | ||
| sudo emerge -av dev-ruby/rubygems
 | ||
| ```
 | ||
| 
 | ||
| On Windows, you may need to install [RubyInstaller
 | ||
| DevKit](https://wiki.github.com/oneclick/rubyinstaller/development-kit).
 | ||
| 
 | ||
| On Android (with Termux) you can install all requirements by running:
 | ||
| 
 | ||
| ```sh
 | ||
| apt update && apt install libffi-dev clang ruby-dev make
 | ||
| ```
 | ||
| 
 | ||
| On macOS, you may need to update RubyGems (using `sudo` only if necessary):
 | ||
| 
 | ||
| ```sh
 | ||
| gem update --system
 | ||
| ```
 | ||
| 
 | ||
| If you still have issues, you can download and install new Command Line
 | ||
| Tools (such as `gcc`) using the following command:
 | ||
| 
 | ||
| ```sh
 | ||
| xcode-select --install
 | ||
| ```
 | ||
| 
 | ||
| which may allow you to install native gems using this command (again, using
 | ||
| `sudo` only if necessary):
 | ||
| 
 | ||
| ```sh
 | ||
| gem install jekyll
 | ||
| ```
 | ||
| 
 | ||
| Note that upgrading macOS does not automatically upgrade Xcode itself
 | ||
| (that can be done separately via the App Store), and having an out-of-date
 | ||
| Xcode.app can interfere with the command line tools downloaded above. If
 | ||
| you run into this issue, upgrade Xcode and install the upgraded Command
 | ||
| Line Tools.
 | ||
| 
 | ||
| ### Running Jekyll as Non-Superuser (no sudo!) 
 | ||
| {: #no-sudo}
 | ||
| 
 | ||
| On most flavors of Linux, macOS, and Bash on Ubuntu on Windows, it is
 | ||
| possible to run Jekyll as a non-superuser and without having to install
 | ||
| gems to system-wide locations by adding the following lines to the end 
 | ||
| of your `.bashrc` file:
 | ||
| 
 | ||
| ```
 | ||
| # Ruby exports
 | ||
| 
 | ||
| export GEM_HOME=$HOME/gems
 | ||
| export PATH=$HOME/gems/bin:$PATH
 | ||
| ```
 | ||
| 
 | ||
| This tells `gem` to place its gems within the user's home folder, 
 | ||
| not in a system-wide location, and adds the local `jekyll` command to the 
 | ||
| user's `PATH` ahead of any system-wide paths.
 | ||
| 
 | ||
| This is also useful for many shared webhosting services, where user accounts
 | ||
| have only limited privileges. Adding these exports to `.bashrc` before running 
 | ||
| `gem install jekyll bundler` allows a complete non-`sudo` install of Jekyll.
 | ||
| 
 | ||
| To activate the new exports, either close and restart Bash, logout and 
 | ||
| log back into your shell account, or run `. .bashrc` in the 
 | ||
| currently-running shell.
 | ||
| 
 | ||
| If you see the following error when running the `jekyll new` command,
 | ||
| you can solve it by using the above-described procedure:
 | ||
| 
 | ||
| ```sh
 | ||
| jekyll new test
 | ||
| 
 | ||
| Running bundle install in /home/user/test...
 | ||
| 
 | ||
| Your user account isn't allowed to install to the system RubyGems.
 | ||
| You can cancel this installation and run:
 | ||
| 
 | ||
|       bundle install --path vendor/bundle
 | ||
| 
 | ||
| to install the gems into ./vendor/bundle/, or you can enter your password
 | ||
| and install the bundled gems to RubyGems using sudo.
 | ||
| 
 | ||
| Password:
 | ||
| ```
 | ||
| 
 | ||
| Once this is done, the `jekyll new` command should work properly for
 | ||
| your user account.
 | ||
| 
 | ||
| ### Jekyll & Mac OS X 10.11
 | ||
| 
 | ||
| With the introduction of System Integrity Protection, several directories
 | ||
| that were previously writable are now considered system locations and are no
 | ||
| longer available. Given these changes, there are a couple of simple ways to get
 | ||
| up and running. One option is to change the location where the gem will be
 | ||
| installed (again, using `sudo` only if necessary):
 | ||
| 
 | ||
| ```sh
 | ||
| gem install -n /usr/local/bin jekyll
 | ||
| ```
 | ||
| 
 | ||
| Alternatively, Homebrew can be installed and used to set up Ruby. This can be
 | ||
| done as follows:
 | ||
| 
 | ||
| ```sh
 | ||
| ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 | ||
| ```
 | ||
| 
 | ||
| Once Homebrew is installed, the second step is easy:
 | ||
| 
 | ||
| ```sh
 | ||
| brew install ruby
 | ||
| ```
 | ||
| 
 | ||
| Advanced users (with more complex needs) may find it helpful to choose one of a
 | ||
| number of Ruby version managers ([RVM][], [rbenv][], [chruby][], [etc][].) in
 | ||
| which to install Jekyll.
 | ||
| 
 | ||
| [RVM]: https://rvm.io
 | ||
| [rbenv]: http://rbenv.org
 | ||
| [chruby]: https://github.com/postmodern/chruby
 | ||
| [etc]: https://github.com/rvm/rvm/blob/master/docs/alt.md
 | ||
| 
 | ||
| If you elect to use one of the above methods to install Ruby, it might be
 | ||
| necessary to modify your `$PATH` variable using the following command:
 | ||
| 
 | ||
| ```sh
 | ||
| export PATH=/usr/local/bin:$PATH
 | ||
| ```
 | ||
| 
 | ||
| GUI apps can modify the `$PATH` as follows:
 | ||
| 
 | ||
| ```sh
 | ||
| launchctl setenv PATH "/usr/local/bin:$PATH"
 | ||
| ```
 | ||
| 
 | ||
| Either of these approaches are useful because `/usr/local` is considered a
 | ||
| "safe" location on systems which have SIP enabled, they avoid potential
 | ||
| conflicts with the version of Ruby included by Apple, and it keeps Jekyll and
 | ||
| its dependencies in a sandboxed environment. This also has the added
 | ||
| benefit of not requiring `sudo` when you want to add or remove a gem.
 | ||
| 
 | ||
| ### Could not find a JavaScript runtime. (ExecJS::RuntimeUnavailable)
 | ||
| 
 | ||
| This error can occur during the installation of `jekyll-coffeescript` when
 | ||
| you don't have a proper JavaScript runtime. To solve this, either install
 | ||
| `execjs` and `therubyracer` gems, or install `nodejs`. Check out
 | ||
| [issue #2327](https://github.com/jekyll/jekyll/issues/2327) for more info.
 | ||
| 
 | ||
| ## Problems running Jekyll
 | ||
| 
 | ||
| On Debian or Ubuntu, you may need to add `/var/lib/gems/1.8/bin/` to your path
 | ||
| in order to have the `jekyll` executable be available in your Terminal.
 | ||
| 
 | ||
| ## Base-URL Problems
 | ||
| 
 | ||
| If you are using base-url option like:
 | ||
| 
 | ||
| ```sh
 | ||
| jekyll serve --baseurl '/blog'
 | ||
| ```
 | ||
| 
 | ||
| … then make sure that you access the site at:
 | ||
| 
 | ||
| ```
 | ||
| http://localhost:4000/blog/index.html
 | ||
| ```
 | ||
| 
 | ||
| It won’t work to just access:
 | ||
| 
 | ||
| ```
 | ||
| http://localhost:4000/blog
 | ||
| ```
 | ||
| 
 | ||
| ## Configuration problems
 | ||
| 
 | ||
| The order of precedence for conflicting [configuration settings](../configuration/)
 | ||
| is as follows:
 | ||
| 
 | ||
| 1. Command-line flags
 | ||
| 2. Configuration file settings
 | ||
| 3. Defaults
 | ||
| 
 | ||
| That is: defaults are overridden by options specified in `_config.yml`,
 | ||
| and flags specified at the command-line will override all other settings
 | ||
| specified elsewhere.
 | ||
| 
 | ||
| **Note: From v3.3.0 onward, Jekyll does not process `node_modules` and certain subdirectories within `vendor`, by default. But, by having an `exclude:` array defined explicitly in the config file overrides this default setting, which results in some users to encounter an error in building the site, with the following error message:**
 | ||
| 
 | ||
| ```sh
 | ||
|     ERROR: YOUR SITE COULD NOT BE BUILT:
 | ||
|     ------------------------------------
 | ||
|     Invalid date '<%= Time.now.strftime('%Y-%m-%d %H:%M:%S %z') %>':
 | ||
|     Document 'vendor/bundle/gems/jekyll-3.4.3/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb'
 | ||
|     does not have a valid date in the YAML front matter.
 | ||
| ```
 | ||
| 
 | ||
| Simply adding `vendor/bundle` to the `exclude:` list will solve this problem but will lead to having other sub-directories under `/vendor/` (and also `/node_modules/`, if present) be processed to the destination folder `_site`.
 | ||
| 
 | ||
| 
 | ||
| The proper solution is to incorporate the default setting for `exclude:` rather than override it completely:
 | ||
| 
 | ||
| For versions upto `v3.4.3`, the `exclude:` setting must look like following:
 | ||
| 
 | ||
| ```yaml
 | ||
| exclude:
 | ||
|   - Gemfile
 | ||
|   - Gemfile.lock
 | ||
|   - node_modules
 | ||
|   - vendor/bundle/
 | ||
|   - vendor/cache/
 | ||
|   - vendor/gems/
 | ||
|   - vendor/ruby/
 | ||
|   - any_additional_item # any user-specific listing goes at the end
 | ||
| ```
 | ||
| 
 | ||
| From `v3.5` onward, `Gemfile` and `Gemfile.lock` are also excluded by default. So, in most cases there is no need to define another `exclude:` array in the config file. So an existing definition can either be modified as above, or removed completely, or simply commented out to enable easy edits in future.
 | ||
| 
 | ||
| 
 | ||
| ## Markup Problems
 | ||
| 
 | ||
| The various markup engines that Jekyll uses may have some issues. This
 | ||
| page will document them to help others who may run into the same
 | ||
| problems.
 | ||
| 
 | ||
| ### Liquid
 | ||
| 
 | ||
| Liquid version 2.0 seems to break the use of `{{ "{{" }}` in templates.
 | ||
| Unlike previous versions, using `{{ "{{" }}` in 2.0 triggers the following error:
 | ||
| 
 | ||
| ```sh
 | ||
| '{{ "{{" }}' was not properly terminated with regexp: /\}\}/  (Liquid::SyntaxError)
 | ||
| ```
 | ||
| 
 | ||
| ### Excerpts
 | ||
| 
 | ||
| Since v1.0.0, Jekyll has had automatically-generated post excerpts. Since
 | ||
| v1.1.0, Jekyll also passes these excerpts through Liquid, which can cause
 | ||
| strange errors where references don't exist or a tag hasn't been closed. If you
 | ||
| run into these errors, try setting `excerpt_separator: ""` in your
 | ||
| `_config.yml`, or set it to some nonsense string.
 | ||
| 
 | ||
| ## Production Problems
 | ||
| 
 | ||
| If you run into an issue that a static file can't be found in your
 | ||
| production environment during build since v3.2.0 you should set your
 | ||
| [environment to `production`](../configuration/#specifying-a-jekyll-environment-at-build-time).
 | ||
| The issue is caused by trying to copy a non-existing symlink.
 | ||
| 
 | ||
| <div class="note">
 | ||
|   <h5>Please report issues you encounter!</h5>
 | ||
|   <p>
 | ||
|   If you come across a bug, please <a href="{{ site.repository }}/issues/new">create an issue</a>
 | ||
|   on GitHub describing the problem and any work-arounds you find so we can
 | ||
|   document it here for others.
 | ||
|   </p>
 | ||
| </div>
 |