Search code examples
rubyjekyllrbenv

Why is jekyll --server returning errors


I've noticed a couple of posts that are similar to this but don't understand how to solve the issue.

I have rbenv with ruby 1.9.3-p392 installed and get the following error when I run jekyll --server:

Configuration from /Users/seiju/Sites/a8os/_config.yml
Building site: /Users/seiju/Sites/a8os -> /Users/seiju/Sites/a8os/_site
Liquid Exception: undefined method `xmlschema' for nil:NilClass in sitemap.xml
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/filters.rb:57:in `date_to_xmlschema'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/strainer.rb:43:in `invoke'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/context.rb:75:in `invoke'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/variable.rb:50:in `block in render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/variable.rb:38:in `each'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/variable.rb:38:in `inject'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/variable.rb:38:in `render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/block.rb:106:in `block in render_all'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/block.rb:93:in `each'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/block.rb:93:in `render_all'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/block.rb:82:in `render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/template.rb:124:in `render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/liquid-2.5.0/lib/liquid/template.rb:132:in `render!'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/convertible.rb:79:in `do_layout'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/page.rb:100:in `render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/site.rb:204:in `block in render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/site.rb:203:in `each'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/site.rb:203:in `render'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/lib/jekyll/site.rb:41:in `process'
/Users/seiju/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/jekyll-0.12.1/bin/jekyll:264:in `<top (required)>'
/Users/seiju/.rbenv/versions/1.9.3-p392/bin/jekyll:23:in `load'
/Users/seiju/.rbenv/versions/1.9.3-p392/bin/jekyll:23:in `<main>'
Build Failed

I'm so confused and don't know where to start on fixing this issue. I'm also using jekyll version (0.12.1).

Below is my sitemap.xml:

---
---

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/sitemap.xsl"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">    
<url>
<loc>http://aceeightofspades.com/</loc>
<lastmod>{{ site.time | date_to_xmlschema }}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://aceeightofspades.com{{ post.url }}/</loc>
<lastmod>{{ post.date | date_to_xmlschema }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>

Solution

  • It looks like you’re trying to create an <url> entry for a non-existent top level post object. What I think you want is to loop over your posts and create an entry for each.

    Something like this:

    {% for post in site.posts %}
    <url>
      <loc>http://aceeightofspades.com{{ post.url }}/</loc>
      <lastmod>{{ post.date | date_to_xmlschema }}</lastmod>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
    </url>
    {% endfor %}
    

    This wraps your second <url> block with {% for post in site.posts %} and {% endfor %}, so that within that block post is no longer null.