jekyll / jemoji

GitHub-flavored emoji plugin for Jekyll
http://rubygems.org/gems/jemoji
MIT License
557 stars 62 forks source link

Unable to make jemoji work in my Jekyll installation #95

Closed robertohuertasm closed 5 years ago

robertohuertasm commented 5 years ago

I've been using this plugin so far and it was working perfectly but recently I've found that it doesn't work anymore and I don't really know why. Surely, I've changed something in my installation that broke it but I don't have a clue of what may be going on.

I'm using jekyll 3.8.5. I've trying updating and reinstalling all the packages, but no luck.

I have included jemoji in the plugins section in _config.yml:

# Plugins
plugins:
  - jekyll-paginate
  - jekyll-archives
  - jemoji

And this is my Gemfile.lock:

EM
  remote: https://rubygems.org/
  specs:
    activesupport (4.2.11.1)
      i18n (~> 0.7)
      minitest (~> 5.1)
      thread_safe (~> 0.3, >= 0.3.4)
      tzinfo (~> 1.1)
    addressable (2.6.0)
      public_suffix (>= 2.0.2, < 4.0)
    coffee-script (2.4.1)
      coffee-script-source
      execjs
    coffee-script-source (1.11.1)
    colorator (1.1.0)
    commonmarker (0.17.13)
      ruby-enum (~> 0.5)
    concurrent-ruby (1.1.5)
    dnsruby (1.61.2)
      addressable (~> 2.5)
    em-websocket (0.5.1)
      eventmachine (>= 0.12.9)
      http_parser.rb (~> 0.6.0)
    ethon (0.12.0)
      ffi (>= 1.3.0)
    eventmachine (1.2.7)
    eventmachine (1.2.7-x64-mingw32)
    execjs (2.7.0)
    faraday (0.15.4)
      multipart-post (>= 1.2, < 3)
    ffi (1.11.1)
    ffi (1.11.1-x64-mingw32)
    forwardable-extended (2.6.0)
    gemoji (3.0.1)
    github-pages (198)
      activesupport (= 4.2.11.1)
      github-pages-health-check (= 1.16.1)
      jekyll (= 3.8.5)
      jekyll-avatar (= 0.6.0)
      jekyll-coffeescript (= 1.1.1)
      jekyll-commonmark-ghpages (= 0.1.5)
      jekyll-default-layout (= 0.1.4)
      jekyll-feed (= 0.11.0)
      jekyll-gist (= 1.5.0)
      jekyll-github-metadata (= 2.12.1)
      jekyll-mentions (= 1.4.1)
      jekyll-optional-front-matter (= 0.3.0)
      jekyll-paginate (= 1.1.0)
      jekyll-readme-index (= 0.2.0)
      jekyll-redirect-from (= 0.14.0)
      jekyll-relative-links (= 0.6.0)
      jekyll-remote-theme (= 0.3.1)
      jekyll-sass-converter (= 1.5.2)
      jekyll-seo-tag (= 2.5.0)
      jekyll-sitemap (= 1.2.0)
      jekyll-swiss (= 0.4.0)
      jekyll-theme-architect (= 0.1.1)
      jekyll-theme-cayman (= 0.1.1)
      jekyll-theme-dinky (= 0.1.1)
      jekyll-theme-hacker (= 0.1.1)
      jekyll-theme-leap-day (= 0.1.1)
      jekyll-theme-merlot (= 0.1.1)
      jekyll-theme-midnight (= 0.1.1)
      jekyll-theme-minimal (= 0.1.1)
      jekyll-theme-modernist (= 0.1.1)
      jekyll-theme-primer (= 0.5.3)
      jekyll-theme-slate (= 0.1.1)
      jekyll-theme-tactile (= 0.1.1)
      jekyll-theme-time-machine (= 0.1.1)
      jekyll-titles-from-headings (= 0.5.1)
      jemoji (= 0.10.2)
      kramdown (= 1.17.0)
      liquid (= 4.0.0)
      listen (= 3.1.5)
      mercenary (~> 0.3)
      minima (= 2.5.0)
      nokogiri (>= 1.8.5, < 2.0)
      rouge (= 2.2.1)
      terminal-table (~> 1.4)
    github-pages-health-check (1.16.1)
      addressable (~> 2.3)
      dnsruby (~> 1.60)
      octokit (~> 4.0)
      public_suffix (~> 3.0)
      typhoeus (~> 1.3)
    html-pipeline (2.11.1)
      activesupport (>= 2)
      nokogiri (>= 1.4)
    http_parser.rb (0.6.0)
    i18n (0.9.5)
      concurrent-ruby (~> 1.0)
    jekyll (3.8.5)
      addressable (~> 2.4)
      colorator (~> 1.0)
      em-websocket (~> 0.5)
      i18n (~> 0.7)
      jekyll-sass-converter (~> 1.0)
      jekyll-watch (~> 2.0)
      kramdown (~> 1.14)
      liquid (~> 4.0)
      mercenary (~> 0.3.3)
      pathutil (~> 0.9)
      rouge (>= 1.7, < 4)
      safe_yaml (~> 1.0)
    jekyll-archives (2.2.1)
      jekyll (>= 3.6, < 5.0)
    jekyll-avatar (0.6.0)
      jekyll (~> 3.0)
    jekyll-coffeescript (1.1.1)
      coffee-script (~> 2.2)
      coffee-script-source (~> 1.11.1)
    jekyll-commonmark (1.3.1)
      commonmarker (~> 0.14)
      jekyll (>= 3.7, < 5.0)
    jekyll-commonmark-ghpages (0.1.5)
      commonmarker (~> 0.17.6)
      jekyll-commonmark (~> 1)
      rouge (~> 2)
    jekyll-default-layout (0.1.4)
      jekyll (~> 3.0)
    jekyll-feed (0.11.0)
      jekyll (~> 3.3)
    jekyll-gist (1.5.0)
      octokit (~> 4.2)
    jekyll-github-metadata (2.12.1)
      jekyll (~> 3.4)
      octokit (~> 4.0, != 4.4.0)
    jekyll-mentions (1.4.1)
      html-pipeline (~> 2.3)
      jekyll (~> 3.0)
    jekyll-optional-front-matter (0.3.0)
      jekyll (~> 3.0)
    jekyll-paginate (1.1.0)
    jekyll-readme-index (0.2.0)
      jekyll (~> 3.0)
    jekyll-redirect-from (0.14.0)
      jekyll (~> 3.3)
    jekyll-relative-links (0.6.0)
      jekyll (~> 3.3)
    jekyll-remote-theme (0.3.1)
      jekyll (~> 3.5)
      rubyzip (>= 1.2.1, < 3.0)
    jekyll-sass-converter (1.5.2)
      sass (~> 3.4)
    jekyll-seo-tag (2.5.0)
      jekyll (~> 3.3)
    jekyll-sitemap (1.2.0)
      jekyll (~> 3.3)
    jekyll-swiss (0.4.0)
    jekyll-theme-architect (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-cayman (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-dinky (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-hacker (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-leap-day (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-merlot (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-midnight (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-minimal (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-modernist (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-primer (0.5.3)
      jekyll (~> 3.5)
      jekyll-github-metadata (~> 2.9)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-slate (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-tactile (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-theme-time-machine (0.1.1)
      jekyll (~> 3.5)
      jekyll-seo-tag (~> 2.0)
    jekyll-titles-from-headings (0.5.1)
      jekyll (~> 3.3)
    jekyll-watch (2.2.1)
      listen (~> 3.0)
    jemoji (0.10.2)
      gemoji (~> 3.0)
      html-pipeline (~> 2.2)
      jekyll (~> 3.0)
    kramdown (1.17.0)
    liquid (4.0.0)
    listen (3.1.5)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
      ruby_dep (~> 1.2)
    mercenary (0.3.6)
    mini_portile2 (2.4.0)
    minima (2.5.0)
      jekyll (~> 3.5)
      jekyll-feed (~> 0.9)
      jekyll-seo-tag (~> 2.1)
    minitest (5.11.3)
    multipart-post (2.1.1)
    nokogiri (1.10.3)
      mini_portile2 (~> 2.4.0)
    nokogiri (1.10.3-x64-mingw32)
      mini_portile2 (~> 2.4.0)
    octokit (4.14.0)
      sawyer (~> 0.8.0, >= 0.5.3)
    pathutil (0.16.2)
      forwardable-extended (~> 2.6)
    public_suffix (3.1.1)
    rb-fsevent (0.10.3)
    rb-inotify (0.10.0)
      ffi (~> 1.0)
    rouge (2.2.1)
    ruby-enum (0.7.2)
      i18n
    ruby_dep (1.5.0)
    rubyzip (1.2.3)
    safe_yaml (1.0.5)
    sass (3.7.4)
      sass-listen (~> 4.0.0)
    sass-listen (4.0.0)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
    sawyer (0.8.2)
      addressable (>= 2.3.5)
      faraday (> 0.8, < 2.0)
    terminal-table (1.8.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    thread_safe (0.3.6)
    typhoeus (1.3.1)
      ethon (>= 0.9.0)
    tzinfo (1.2.5)
      thread_safe (~> 0.1)
    unicode-display_width (1.6.0)

PLATFORMS
  ruby
  x64-mingw32

DEPENDENCIES
  github-pages
  jekyll-archives
  jekyll-feed
  jekyll-paginate
  jekyll-sitemap
  jemoji

RUBY VERSION
   ruby 2.3.7p456

BUNDLED WITH
   2.0.2

Any ideas? Thanks for your support!

robertohuertasm commented 5 years ago

I've been digging into how this works and it seems that my issue is with the replace_document_body function.

I guess, by the code, that the second line was intended to partition the html into three parts using a regular expression to capture the body.

This seems to be failing and I'm only getting the head variable informed, but with the whole document in it. Obviously, as opener and tail are empty the rest of the function won't replace the emojis at all:

def replace_document_body(doc)
        src                 = emoji_src(doc.site.config)
        head, opener, tail  = doc.output.partition(OPENING_BODY_TAG_REGEX)
        body_content, *rest = tail.partition("</body>")
        processed_markup    = filter_with_emoji(src).call(body_content)[:output].to_s
        String.new(head) << opener << processed_markup << rest.join
end

I've changed this function to just replace the emojis in the doc.output directly and it seems to be working.

I'm not sure how to proceed, as I don't know if this bug happens to me because of my Ruby, Jekyll, Bundler versions (I don't know that much about the Ruby ecosystem). I guess there must be more people suffering this bug and I'd be willing to add a PR if someone could help me to pinpoint if this is indeed a bug only affecting +Jekyll 3.8.5.

DirtyF commented 5 years ago

Can you test on a more recent Ruby version? 2.6, 2.5 or even 2.4?

robertohuertasm commented 5 years ago

I'm publishing my site with netlify and they use Ruby 2.4.3. Still not working. I'll try to test newer versions.

robertohuertasm commented 5 years ago

Confirmed locally. Ruby 2.4.3 not working.

robertohuertasm commented 5 years ago

Ruby 2.6.3 not working either. I'm using Bundler 2.0.1.

mattr- commented 5 years ago

Could you try with a 1.17.x version of bundler? The bundler folks say that 2.0.x should be backwards compatible with 1.17.x but we've run into lots of folks who are having issues with it.

robertohuertasm commented 5 years ago

Same with Bundler 1.17.3, Ruby 2.4.3 and jemoji 0.10.2.

robertohuertasm commented 5 years ago

For the moment, in case anyone else is having the same problem, I forked the repo and created a new branch called fix-rob-issue. Then, in my Gemfile:

group :jekyll_plugins do
    gem 'jekyll-feed'
    gem 'jekyll-sitemap'
    gem 'jekyll-archives'
    gem 'jekyll-paginate'
    gem 'jemoji', git: 'https://github.com/robertohuertasm/jemoji', branch: 'fix-rob-issue'
end

This works perfectly for me.

ashmaroli commented 5 years ago

@robertohuertasm Is your site's source code publicly available? I'd like to investigate the cause behind this issue..

robertohuertasm commented 5 years ago

@ashmaroli, it's not public but I've assembled a new public repo reproducing the issue: https://gitlab.com/robertohuertasm/jemoji-bug

Open the only post (http://127.0.0.1:4001/2018/09/29/test/) and, if everything works, you should see an emoji. I only keep getting :wink: unless I completely refactor the replace_document_body function.

Hope it helps!

ashmaroli commented 5 years ago

@robertohuertasm Yep, your test repo helped isolate the bug. The fix is to simply modify the regex used to support multiline body tag..

robertohuertasm commented 5 years ago

Thanks @ashmaroli for the quick fix. I've seen there's a new release 0.11.1. Unfortunately for me, the github-pages gem only works with jemoji 0.10.2.

ashmaroli commented 5 years ago

Hopefully, github-pages will ship a new release soon. Meanwhile, I've also ported the patch to be implemented within jekyll-mentions (the plugins work quite similarly, with a very minor difference).