为什么我在Jekyll上安装lunr.js搜索时出错?

时间:2015-01-31 19:50:25

标签: jekyll jekyll-extensions

我试图在jekyll网站上安装lunr.js,我收到此错误:

Users/tjohnson/projects/resolve/_plugins/jekyll_lunr_js_search.rb:5:in `require': cannot load such file -- v8 (LoadError)
from /Users/tjohnson/projects/resolve/_plugins/jekyll_lunr_js_search.rb:5:in `<top (required)>'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:58:in `require'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:58:in `block (2 levels) in require_plugin_files'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:57:in `each'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:57:in `block in require_plugin_files'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:56:in `each'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:56:in `require_plugin_files'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/plugin_manager.rb:18:in `conscientious_require'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/site.rb:74:in `setup'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/site.rb:36:in `initialize'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/commands/build.rb:28:in `new'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/commands/build.rb:28:in `process'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/lib/jekyll/commands/serve.rb:25:in `block (2 levels) in init_with_program'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary/command.rb:220:in `call'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary/command.rb:220:in `block in execute'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary/command.rb:220:in `each'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary/command.rb:220:in `execute'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary/program.rb:42:in `go'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/mercenary-0.3.5/lib/mercenary.rb:19:in `program'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/gems/jekyll-2.4.0/bin/jekyll:18:in `<top (required)>'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/bin/jekyll:23:in `load'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/bin/jekyll:23:in `<main>'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/bin/ruby_executable_hooks:15:in `eval'
from /Users/tjohnson/.rvm/gems/ruby-2.0.0-p481/bin/ruby_executable_hooks:15:in `<main>'

我试图按照https://github.com/slashdotdash/jekyll-lunr-js-search上的说明操作,但我对Jekyll来说有些新鲜,所以我可能不会理解一切。有两种方法可以安装它:使用rubygem或直接下载预先构建的插件文件。我选择了后者。以下是我采取的步骤:

  1. 将回购克隆克隆到我的本地机器。
  2. 将jekyll_lunr_js_search.rb和jekyll_lunr_js_search文件夹移至我的_plugins目录。
  3. 下载缩小的search.min.js文件(其中包含许多其他js)并将其添加到我的javascript目录中。
  4. 将jquery.lunr.search.js添加到我的javascript目录。
  5. 在我的default.html文件中添加了以下引用:
  6. <script src="{{ "/javascripts/search.min.js" | prepend:site.baseurl }}">
        </script>
        <script src="{{ "/javascripts/jquery.lunr.search.js" | prepend:site.baseurl}}"></script>
    
    1. 此脚本也添加到我的default.html(通过包含):
    2.  <script type="text/javascript">
          $(function() {
          $('#search-query').lunrSearch({
               indexUrl: '/js/index.json',   // Url for the .json file containing search index data
                results : '#search-results',  // selector for containing search results element
                entries : '.entries',         // selector for search entries containing element (contained within results above)
                template: '#search-results-template'  // selector for Mustache.js template
              });
            });
          </script>
      
      1. 将此搜索表单添加到页面:
      2.  <div id="search">
              <form action="/search" method="get">
                <input type="text" id="search-query" name="q" placeholder="Search" autocomplete="off">
              </form>
                </div>
        

        ,这会在同一页面上的表单下方生成容器:

         <section id="search-results" style="display: none;">
              <p>Search results</p>
              <div class="entries">
              </div>
            </section>
        

        和它下面的胡子模板:

         {% raw %}
            <script id="search-results-template" type="text/mustache">
              {{#entries}}
                <article>
                  <h3>
                    {{#date}}<small><time datetime="{{pubdate}}" pubdate>{{displaydate}}</time></small>{{/date}}
                    <a href="{{url}}">{{title}}</a>
                  </h3>
                </article>
              {{/entries}}
            </script>
            {% endraw %}
        

        现在,当我构建我的jekyll网站时,我收到了之前列出的错误。 (没有插件,我不会得到这个错误。)有什么想法吗?我真的需要在我的网站上使用搜索功能,而这个功能似乎是最好的。

1 个答案:

答案 0 :(得分:0)

首先尝试安装libv8 Ruby gem。

gem install libv8 -v '3.16.14.7'

gem install libv8 -v '3.16.14.7' -- --with-system-v8

然后安装最新版本的jekyll_lunr_js_search gem。

gem install jekyll-lunr-js-search

最后,在Jekyll网站的_config.yml配置文件中包含对插件gem的引用。

gems: ['jekyll-lunr-js-search']