phusion / traveling-ruby

Self-contained Ruby binaries that can run on any Linux distribution and any macOS machine.
http://FooBarWidget.github.io/traveling-ruby
MIT License
2.1k stars 122 forks source link

Which native extensions should we package? #6

Open FooBarWidget opened 9 years ago

FooBarWidget commented 9 years ago

In issue #3 I have described how I envision support for native extensions to work. Since requiring developers to build native extensions themselves is too much hassle, I proposed providing precompiled versions of the most popular native extensions, that developers can just easily drop into their package.

But this raises the question: which native extensions? We can't automatically package them all. For reasons explained in #3, packaging native extensions requires a lot of manual work. So we have to choose.

I plan on packaging these gems:

Because they're popular:

Because Rails apps likely need these:

I've opened a poll for more native extensions. Please add your input here: https://docs.google.com/spreadsheets/d/1oNgrwHyV9UaMGFTttsfA9QPvL461NWLfHeeAap3Az_A/edit?usp=sharing

drnic commented 9 years ago

Thanks!! :gift:

drnic commented 9 years ago

traveling-bosh is now fully operational - thanks @FooBarWidget https://blog.starkandwayne.com/2014/12/24/traveling-bosh-cli-no-more-installation-pain/

etdsoft commented 9 years ago

Hi team,

What about @jgarber's RedCloth - https://github.com/jgarber/redcloth?

Also, are there any docs that explain what is involved in the process?

Thanks

FooBarWidget commented 9 years ago

It involves adding the gem to shared/Gemfile and rebuilding the binaries using the relevant scripts. But if the gem requires any additional libraries, then you will have to update the runtime builder script to compile a statically linked version of the library without further dependencies. It's very much custom and manual work for each library.

FooBarWidget commented 9 years ago

RedCloth, escape_utils, posix-spawn, nokogumbo and github-markdown have been added because they're needed by Octodown.

FooBarWidget commented 9 years ago

rugged has been added.

FooBarWidget commented 9 years ago

charlock_holmes has been added.

etdsoft commented 9 years ago

Hey Hongli, do you plan to push a new release now that all the Octodown gems have been added? We're planing to use traveling-ruby for the next release of Dradis Framework too. This is where all the RedCloth stuff was coming from.

FooBarWidget commented 9 years ago

Soon. I work on Traveling Ruby occasionally during the weekend, but during the week most of my time is occupied by Passenger maintenance/development as well as business operations.

etdsoft commented 9 years ago

Of course, makes sense, no rush.

FooBarWidget commented 9 years ago

The unf_ext gem has been added. It's used by Elasticrawl.

FooBarWidget commented 9 years ago

Traveling Ruby 20150130 is out. Next version is planned to use Ruby 2.2, as per GH-28.

etdsoft commented 9 years ago

excellent!

ghost commented 9 years ago

what about Puma?

FooBarWidget commented 9 years ago

Added puma, unicorn, kgio, raindrops, fast-stemmer, hitimes, redcarpet.

ghost commented 9 years ago

awesome! thanks.

ghost commented 9 years ago

ok, i see puma, unicorn etc. in shared/gemfiles/20150210-next of next branch. would they be available on s3 any soon? thanks for your efforts.

Nowaker commented 9 years ago

I added nio4r to the list. This is a dependency of Celluloid::IO which is great for making concurrent HTTP requests.

Nowaker commented 9 years ago

@FooBarWidget The same as @sleewoo - when can you release binaries for puma? The spreadsheet says "Already packaged" but Puma is not available at http://traveling-ruby.s3-us-west-2.amazonaws.com/list.html.

FooBarWidget commented 9 years ago

It's packaged in the development branch. I'm sick right now and there are lots of high-priority non-Travling-Ruby things on my todo list, so I'm afraid I can't give you a time indication right now.

Nowaker commented 9 years ago

Are there any binaries for the development branch?

FooBarWidget commented 9 years ago

No. I build it from my laptop on every release. If you need binaries now, you should run the build scripts yourself.

ghost commented 9 years ago

i was able to build everything in next branch. could provide output if interested. extensions are full of backdoors of course :)

michaelbarton commented 9 years ago

Could it be possible to provide a native extension of gherkin, the gem that is used for cucumber? We would like to share our test suite for bioinformatics tools powered by cucumber. I gave this a try today but I saw that gherkin is a native extension.

FooBarWidget commented 9 years ago

I'll look into it. I've scheduled some time for Traveling Ruby maintenance work this week. Right now I'm blocked by https://bitbucket.org/ged/ruby-pg/issue/219/please-release-a-new-gem.

michaelbarton commented 9 years ago

Thanks. I took a look at the code for building native extensions. I think I almost got it to work, I was able to get everything to appear to compile but I wasn't sure about where the final output was produced, or if it was produced. I think with a little more documentation I think I might have been able to do this myself.

FooBarWidget commented 9 years ago

@michaelbarton The build output is in the 'output' directory. The 'package' script packages the output into tarballs.

Are you talking about gherkin or gherkin3?

michaelbarton commented 9 years ago

I think gherkin. From what I understand gherkin3 is still in development.

FooBarWidget commented 9 years ago

Ok, version 20150517 is released now, with support for many extensions requested in the past 2 months.

dapicester commented 9 years ago

I added websocket-driver. It was extracted from Faye to provide WebSocket support for Ruby.

ashes999 commented 9 years ago

Hi,

I added gosu. Like most remaining gems on the list, it only has one vote (mine). If you can get back to me about whether this is feasible or not (not actually building the binaries, but assessing it), that would be great @FooBarWidget

Nowaker commented 8 years ago

I've added concurrent-ruby to the list. It's become a very important library now that Sprockets and Sidekiq depend on it.