Middleware in rails app hangs after throwing silent error. #208

Closed
kevzettler opened this Issue Nov 12, 2013 · 7 comments

Projects

None yet

4 participants

@kevzettler

I'm using the middleware within a rails app. It looks like it should be straight forward however I am running in to an issue. When I hit a url with .pdf the request hangs and I never get a response so I have to kill the process and then I get some error output.

pdfkit (0.5.4)
wkhtmltopdf-binary (0.9.9.1)
2013-11-12 00:25:05.397] [lh] [fdfeb8b92f4db0554ed9a3221ad86e35]
RuntimeError - command failed: /Users/kevzettler/.rbenv/versions/1.9.3-p194/bin/wkhtmltopdf --page-size Letter --margin-top 0.75in --margin-right 0.75in --margin-bottom 0.75in --margin-left 0.75in --encoding UTF-8 --print-media-type --quiet - -:
  pdfkit (0.5.4) lib/pdfkit/pdfkit.rb:73:in `to_pdf'

Full stack trace below

=> Booting Thin
=> Rails 3.2.14 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
^C>> Stopping ...
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35] Started GET "/documentation/flat.pdf" for 127.0.0.1 at 2013-11-11 16:25:05 -0800
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Organization Load (1.4ms)  SELECT "public"."organizations".* FROM "public"."organizations" WHERE "public"."organizations"."subdomain" = 'omniata' ORDER BY name LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35] Processing by ZendeskController#flat as HTML
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   User Load (1.1ms)  SELECT "public"."users".* FROM "public"."users" WHERE "public"."users"."id" = 83 LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Organization Load (0.4ms)  SELECT "public"."organizations".* FROM "public"."organizations" WHERE "public"."organizations"."subdomain" = 'omniata' ORDER BY name LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Organization Exists (0.6ms)  SELECT 1 AS one FROM "public"."organizations" INNER JOIN "public"."organizations_users" ON "public"."organizations"."id" = "public"."organizations_users"."organization_id" WHERE "public"."organizations_users"."user_id" = 83 AND "public"."organizations"."id" = 14 ORDER BY name LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   UserPreference Load (0.5ms)  SELECT "public"."user_preferences".* FROM "public"."user_preferences" WHERE "public"."user_preferences"."user_id" = 83 AND "public"."user_preferences"."key" = 'org_14/active_environment_id' LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Environment Load (0.9ms)  SELECT "environments".* FROM "environments" WHERE ("environments"."deleted_at" IS NULL) ORDER BY position LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered zendesk/flat.html.erb within layouts/application (208.5ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_omniata_snippet.html.erb (0.6ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_google_analytics.html.haml (1.6ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.8ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" IS NULL ORDER BY position, position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.5ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 72 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.5ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 89 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.4ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 96 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.4ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 137 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.3ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 139 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.4ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 142 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.3ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 140 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ReportGroup Load (0.4ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 145 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   DataModel Load (0.5ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_head.html.haml (861.6ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_account_dropdown.html.haml (2.9ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" IS NULL ORDER BY position, position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 72 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 89 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 96 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 137 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 139 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 142 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 140 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 145 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered shared/_notifications.html.erb (0.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered shared/_notification_body.html.erb (1.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered shared/_notification_menu.html.erb (2.9ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_notification_bar.html.erb (250.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" IS NULL ORDER BY position, position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 72 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 89 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 96 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 137 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 139 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 142 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 140 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "report_groups".* FROM "report_groups" WHERE "report_groups"."parent_id" = 145 ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   CACHE (0.0ms)  SELECT "data_models".* FROM "data_models" ORDER BY position
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_navigation.html.haml (211.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   ActsAsTaggableOn::Tag Load (0.9ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = 83 AND "taggings"."taggable_type" = 'User' AND (taggings.context = 'ux_flags' AND taggings.tagger_id IS NULL)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered shared/_page_tip.html.erb (34.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_messages.html.haml (1.8ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_content_region.html.erb (2.9ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   User Load (5.0ms)  SELECT "public"."users".* FROM "public"."users" WHERE (confirmed_at IS NOT NULL) ORDER BY email
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/switch_user-0.9.3/app/views/switch_user/_widget.html.erb (4.2ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered shared/_help_menu.html.erb (0.6ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Organization Load (0.7ms)  SELECT "public"."organizations".* FROM "public"."organizations" WHERE "public"."organizations"."pg_schema" = 'omniata' ORDER BY name LIMIT 1
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]   Rendered layouts/_footer.html.erb (107.4ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35] Completed 200 OK in 2023ms (Views: 1679.3ms | ActiveRecord: 33.0ms)
[2013-11-12 00:25:05.397] [omniata.lh] [fdfeb8b92f4db0554ed9a3221ad86e35]
RuntimeError - command failed: /Users/kevzettler/.rbenv/versions/1.9.3-p194/bin/wkhtmltopdf --page-size Letter --margin-top 0.75in --margin-right 0.75in --margin-bottom 0.75in --margin-left 0.75in --encoding UTF-8 --print-media-type --quiet - -:
  pdfkit (0.5.4) lib/pdfkit/pdfkit.rb:73:in `to_pdf'
  pdfkit (0.5.4) lib/pdfkit/middleware.rb:21:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `catch'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  rack (1.4.5) lib/rack/etag.rb:23:in `call'
  rack (1.4.5) lib/rack/conditionalget.rb:25:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/head.rb:14:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/flash.rb:242:in `call'
  rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
  rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/cookies.rb:341:in `call'
  activerecord (3.2.14) lib/active_record/query_cache.rb:64:in `call'
  activerecord (3.2.14) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  activesupport (3.2.14) lib/active_support/callbacks.rb:405:in `_run__921542194848876407__call__96536871766475302__callbacks'
  activesupport (3.2.14) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.14) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
  activesupport (3.2.14) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.14) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  rails-dev-tweaks (0.6.1) lib/rails_dev_tweaks/granular_autoload/middleware.rb:34:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
  better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
  better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.14) lib/rails/rack/logger.rb:32:in `call_app'
  railties (3.2.14) lib/rails/rack/logger.rb:16:in `block in call'
  activesupport (3.2.14) lib/active_support/tagged_logging.rb:22:in `tagged'
  railties (3.2.14) lib/rails/rack/logger.rb:16:in `call'
  quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
  actionpack (3.2.14) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.5) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.14) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.5) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.14) lib/action_dispatch/middleware/static.rb:63:in `call'
  rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
  rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
  rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
  rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
  rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
  railties (3.2.14) lib/rails/engine.rb:484:in `call'
  railties (3.2.14) lib/rails/application.rb:231:in `call'
  rack (1.4.5) lib/rack/content_length.rb:14:in `call'
  railties (3.2.14) lib/rails/rack/log_tailer.rb:17:in `call'
  thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
  thin (1.5.1) lib/thin/connection.rb:79:in `catch'
  thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
  thin (1.5.1) lib/thin/connection.rb:54:in `process'
  thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
  eventmachine (1.0.3) lib/eventmachine.rb:187:in `run_machine'
  eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
  thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
  thin (1.5.1) lib/thin/server.rb:159:in `start'
  rack (1.4.5) lib/rack/handler/thin.rb:13:in `run'
  rack (1.4.5) lib/rack/server.rb:268:in `start'
  railties (3.2.14) lib/rails/commands/server.rb:70:in `start'
  railties (3.2.14) lib/rails/commands.rb:55:in `block in <top (required)>'
  railties (3.2.14) lib/rails/commands.rb:50:in `tap'
  railties (3.2.14) lib/rails/commands.rb:50:in `<top (required)>'
  script/rails:6:in `require'
  script/rails:6:in `<main>'

Exiting
@kevzettler

So I thought this might be a duplicate of #110

however I have since moved from Thin to unicorn_rails locally with 4 workers and i'm seeing the same issue. I have also tried setting:

config.action_controller.asset_host

from this thread http://stackoverflow.com/questions/17908359/generating-pdf-hangs-on-rails-4-using-pdfkit-gem

Looks like this is a common problem with multiple causes. Unfortunately i'm still bocked.

@miry
Contributor
miry commented Dec 19, 2013

@kevzettler you should use more than worker. Because the first worker still waiting for response from wkhtmltopdf process and wkhtmltopdf create a few more requests to get assets. It works for me with unicron_rails and workers 4

@lporras
lporras commented Dec 20, 2013

I'm not an expert of wkhtmltopdf, but I think that the middleware is missing the url on the command line instruction in the space between - -

@lporras
lporras commented Dec 20, 2013

@kevzettler I was having the same error, I'm using unicorn, and noticed that I also was getting errors in unicorn log related to the hash syntax in my Gemfile, so I change all the lines like ie:

gem 'pdfkit', git: "git://github.com/pdfkit/pdfkit.git"

To

gem 'pdfkit', :git => "git://github.com/pdfkit/pdfkit.git"

That solved my problem. Now the middleware works perfect...

@miry
Contributor
miry commented Dec 20, 2013

@lporras It seems you use ruby 1.8. And about space midleware provide html via stdin not just url. So it render page as html and put this html to the wkhtmltopdf.

@lporras
lporras commented Jan 9, 2014

@miry I'm using ruby version 2.0.0-p247

@sigmavirus24
Member

I think @miry's diagnosis is correct in this case. That said, new versions of PDFKit have the ability to provide the user with all of wkhtmltopdf's output if so desired. If you have new information @kevzettler that indicates that @miry was wrong, please let me know and I'll reopen this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment