pages-gem: Jekyll serve fails on Ruby 3.0 (webrick missing)

This issue affects

  • The site generated by GitHub Pages
  • Building sites locally

What did you do (e.g., steps to reproduce)

bundle exec jekyll serve

On macOS 10.15 with Ruby 3.0.0 from Homebrew, using the latest github-pages in a Gemfile.

# Gemfile
gem "github-pages"

# Gemfile.lock:
    github-pages (209)
      jekyll (= 3.9.0)
…

What happened instead?

bundler: failed to load command: jekyll (/usr/local/lib/ruby/gems/3.0.0/bin/jekyll)
/usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve/servlet.rb:3:in `require': cannot load such file -- webrick (LoadError)
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve/servlet.rb:3:in `<top (required)>'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:184:in `require_relative'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:184:in `setup'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:102:in `process'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `block in start'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `each'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `start'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:75:in `block (2 levels) in init_with_program'
	from /usr/local/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
	from /usr/local/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
	from /usr/local/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
	from /usr/local/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
	from /usr/local/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
	from /usr/local/lib/ruby/gems/3.0.0/gems/jekyll-3.9.0/exe/jekyll:15:in `<top (required)>'
	from /usr/local/lib/ruby/gems/3.0.0/bin/jekyll:23:in `load'
	from /usr/local/lib/ruby/gems/3.0.0/bin/jekyll:23:in `<top (required)>'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `load'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `kernel_load'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli/exec.rb:28:in `run'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli.rb:497:in `exec'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli.rb:30:in `dispatch'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/cli.rb:24:in `start'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/gems/3.0.0/gems/bundler-2.2.3/exe/bundle:49:in `block in <top (required)>'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0/bundler/friendly_errors.rb:130:in `with_friendly_errors'
	from /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/gems/3.0.0/gems/bundler-2.2.3/exe/bundle:37:in `<top (required)>'
	from /usr/local/lib/ruby/gems/3.0.0/bin/bundle:23:in `load'
	from /usr/local/lib/ruby/gems/3.0.0/bin/bundle:23:in `<main>'

Additional information

Reported upstream at https://github.com/jekyll/jekyll/issues/8523. Upstream has fixed this in the main branch for the next Jekyll 4 release, however this is unlikely to benefit GitHub Pages anytime soon, so it might be good to add this here for the time being.

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 18
  • Comments: 26 (3 by maintainers)

Commits related to this issue

Most upvoted comments

Hi! In general, we recommend (and support) running the github-pages gem with the Ruby version we’re running in production (2.7.x). We don’t yet support Ruby 3.0.0. Ruby 2.7.x still has webrick so I’d recommend using that until we’ve upgraded for your GitHub Pages needs!

This really should be in the official documentation: it’s severely lacking small details like this that takes hours digging around to figure out.

Definitely needs to be added to the documentation.

bundle add webrick

This saved me while I was trying to run “bundle exec jekyll serve”

Hi! In general, we recommend (and support) running the github-pages gem with the Ruby version we’re running in production (2.7.x). We don’t yet support Ruby 3.0.0. Ruby 2.7.x still has webrick so I’d recommend using that until we’ve upgraded for your GitHub Pages needs!

This really should be in the official documentation: it’s severely lacking small details like this that takes hours digging around to figure out.

Totally. What a way to waste a Sunday trying to solve this after doing the responsible thing and using latest Ruby…

Definitely needs to be upgraded to support Ruby 3.0

Hi! In general, we recommend (and support) running the github-pages gem with the Ruby version we’re running in production (2.7.x). We don’t yet support Ruby 3.0.0. Ruby 2.7.x still has webrick so I’d recommend using that until we’ve upgraded for your GitHub Pages needs!

All of the latest versions we’re running on GitHub Pages are shown here: https://pages.github.com/versions/

There’s even a JSON endpoint: https://pages.github.com/versions.json

I wrote a blog post a while back about staying up to date by using that endpoint. Not sure how well it works today but you could add to your gemfile:

ruby versions["ruby"]

This will tell bundler to use the ruby version that GitHub Pages uses.

Running bundle add webrick && bundle exec jekyll serve still leaves me with a bundler: failed to load command: jekyll… My Gemfile reads

source 'https://rubygems.org'

gem 'jekyll', '3.8.5'

group :jekyll_plugins do
  gem 'jekyll-paginate'
  gem 'jekyll-sitemap'
end

gem "webrick", "~> 1.7"

Any ideas? Thanks!

Ruby 3.0 no longer comes with webrick

bundle add webrick

Exactly what I was looking for! Thank you.

Running bundle add webrick && bundle exec jekyll serve still leaves me with a bundler: failed to load command: jekyll… My Gemfile reads

source 'https://rubygems.org'

gem 'jekyll', '3.8.5'

group :jekyll_plugins do
  gem 'jekyll-paginate'
  gem 'jekyll-sitemap'
end

gem "webrick", "~> 1.7"

Any ideas? Thanks!

Try deleting the Gemfile.lock and re-run bundle install

It worked for me.

Running bundle add webrick && bundle exec jekyll serve still leaves me with a bundler: failed to load command: jekyll… My Gemfile reads

source 'https://rubygems.org'

gem 'jekyll', '3.8.5'

group :jekyll_plugins do
  gem 'jekyll-paginate'
  gem 'jekyll-sitemap'
end

gem "webrick", "~> 1.7"

Any ideas? Thanks!

Try deleting the Gemfile.lock and re-run bundle install

This is probably a bit more serious now that 2.7 is End of Life (https://www.ruby-lang.org/en/news/2023/03/30/ruby-2-7-8-released/). 😬

Ruby 3.0 no longer comes with webrick

bundle add webrick

JFYI, still need it for ruby 3.1.1p18 and jekyll 4.2.2.

In this issue I understand that Jekyll does not support Ruby 3 for macOS. But the documentation at https://jekyllrb.com/docs/installation/macos/ shows the example of using Ruby 3.

adding webrick worked for me too running ruby 3.x