gel-rb / gel Goto Github PK
View Code? Open in Web Editor NEWA modern gem manager: Gel is a lightweight alternative to Bundler
Home Page: https://gel.dev
License: MIT License
A modern gem manager: Gel is a lightweight alternative to Bundler
Home Page: https://gel.dev
License: MIT License
gel lock seems to work ok (as far as I can tell) but gel install cannot find the java platform gems:
jruby -S gel install
Fetching sources.....
Resolving dependencies......
Writing lockfile to /home/enebo/work/puma/Gemfile.lock
Installed 0 of 3 gems
Errors encountered with 3 gems:
jruby-openssl
Unable to locate jruby-openssl 0.10.2 in: https://rubygems.org/
jaro_winkler
make exited with 2
nio4r
extconf exited with 1
===== Gel Internal Error =====
RuntimeError: Unable to locate jruby-openssl 0.10.2 in: https://rubygems.org/
download_gem at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/installer.rb:104
work_download at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/installer.rb:108
install_gem at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/installer.rb:69
start at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/work_pool.rb:62
loop at org/jruby/RubyKernel.java:1425
start at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/work_pool.rb:47
catch at org/jruby/RubyKernel.java:1193
start at /home/enebo/work/jruby/lib/ruby/gems/shared/gems/gel-0.2.0/lib/gel/work_pool.rb:46
This is from the puma repository. I did an earlier gel install and the rest of the gems installed fine. Could this just be something to do with platform?
When I have Gemfile.lock file with follow section:
RUBY VERSION
ruby 2.5.1p57
I catch this message "Unknown lockfile section "RUBY VERSION""
After installing and performing $(gel shell-setup)
, running gem install mailcatcher
or anything similar simply hangs. Additionally, any binaries previously installed by gems fail with something like:
===== Gel Internal Error =====
Traceback (most recent call last):
1: from /usr/local/rbenv/gems/2.6.0/bin/mailcatcher:23:in `<main>'
/usr/local/Cellar/gel/HEAD-40287c8/lib/gel/compatibility/rubygems.rb:159:in `activate_bin_path': Unknown gem "mailcatcher" (RuntimeError)
> bundle exec rake style
Unknown lockfile section "RUBY VERSION"
Unknown lockfile section "RUBY VERSION"
rake aborted!
NoMethodError: undefined method `satisfied_by?' for ["~> 0.10"]:Array
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:72:in `block in supported?'
Ruby 2.6.3
Bundler 1.17.3
Pry 0.12.2
~/.zshrc
:
eval "$(gel shell-setup)"
When I remove this line from my ~/.zshrc
, bundle exec
works as expected.
Stack trace:
> bundle exec rake style
Unknown lockfile section "RUBY VERSION"
Unknown lockfile section "RUBY VERSION"
rake aborted!
NoMethodError: undefined method `satisfied_by?' for ["~> 0.10"]:Array
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:72:in `block in supported?'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:70:in `each'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:70:in `supported?'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:90:in `block in locate_plugins'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:40:in `each'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:40:in `each'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/plugins.rb:85:in `locate_plugins'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/pry_class.rb:352:in `init'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry/pry_class.rb:425:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/Users/viktor/.local/gel/ruby/gems/pry-0.12.2/lib/pry.rb:119:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/Users/viktor/.local/gel/ruby/gems/pry-byebug-3.7.0/lib/pry-byebug.rb:3:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/usr/local/Cellar/gel/0.2.0/lib/gel/environment.rb:569:in `scoped_require'
/usr/local/Cellar/gel/0.2.0/lib/gel/gemfile_parser.rb:128:in `block in autorequire'
/usr/local/Cellar/gel/0.2.0/lib/gel/gemfile_parser.rb:122:in `each'
/usr/local/Cellar/gel/0.2.0/lib/gel/gemfile_parser.rb:122:in `autorequire'
/usr/local/Cellar/gel/0.2.0/lib/gel/environment.rb:493:in `require_groups'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/bundler.rb:9:in `require'
/Users/viktor/Developer/pop/config/application.rb:19:in `<top (required)>'
/Users/viktor/Developer/pop/Rakefile:6:in `require_relative'
/Users/viktor/Developer/pop/Rakefile:6:in `<top (required)>'
/Users/viktor/.local/gel/ruby/gems/rake-12.3.2/exe/rake:27:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/exec.rb:34:in `load'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/exec.rb:34:in `run'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/stub.rb:8:in `run'
/usr/local/Cellar/gel/0.2.0/lib/gel/command.rb:13:in `run'
/usr/local/bin/gel:13:in `<main>'
(See full trace by running task with --trace)
After trying to work through a couple of strategies to get platform handling right, I'm starting to think that pubgrub needs to know about it internally. 😕
Filtering gems that are listed in the Gemfile is easy... but things seem to get more complicated when we start dealing with dependencies.
To take the rails/rails Gemfile as an example:
activerecord-jdbc-adapter
52.1 should be acceptable because it's only depended on by java-only packages, even though it doesn't have a non-java release of that version availableeventmachine
is a dependency of blade
, which is platform-filtered, so even though it has java & windows versions available, we don't want them [or any dependencies they might've had]nokogiri
is platform-filtered in the gemfile, but is also a dependency of many non-filtered gems, so we do need to choose a version that has full platform supportThere generally aren't a lot of examples of situations where a gem has an incomplete set available, but we can look at nokogiri 1.4.4.{1,2} as such an instance: those versions are valid candidates when locking only for windows or java, respectively, but not acceptable otherwise.
gemspec development_group: :ci
ERROR: Failed to evaluate "/Users/sam/dev/core/Gemfile": wrong number of arguments (given 1, expected 0)
/Users/sam/.gem/ruby/2.5.1/gems/gel-0.2.0/lib/gel/gemfile_parser.rb:58:in `gemspec'
Using resque-pause from GitHub with gel fails with:
Fetching sources.....
Resolving dependencies...Traceback (most recent call last):
7: from -e:1:in `<main>'
6: from /Users/kaspth/.gem/ruby/2.6.0/gems/gel-0.3.0/lib/gel/gemspec_parser.rb:90:in `parse'
5: from /Users/kaspth/.gem/ruby/2.6.0/gems/gel-0.3.0/lib/gel/gemspec_parser.rb:90:in `chdir'
4: from /Users/kaspth/.gem/ruby/2.6.0/gems/gel-0.3.0/lib/gel/gemspec_parser.rb:91:in `block in parse'
3: from /Users/kaspth/.gem/ruby/2.6.0/gems/gel-0.3.0/lib/gel/gemspec_parser.rb:91:in `eval'
2: from /Users/kaspth/.local/gel/git/resque-pause-45d8b943d8586/resque-pause.gemspec:5:in `context'
1: from /Users/kaspth/.gem/ruby/2.6.0/gems/gel-0.3.0/lib/gel/gemspec_parser.rb:26:in `new'
/Users/kaspth/.local/gel/git/resque-pause-45d8b943d8586/resque-pause.gemspec:7:in `block in context': uninitialized constant Gel::GemspecParser::Context::Resque (NameError)
ERROR: Gemspec parse failed
Resque
isn't defined at the time because the earlier require "version"
ends up resolving to another activated gem's version.rb
(in my testing from base32) via
gel/lib/gel/compatibility/rubygems.rb
Line 197 in 1cf6653
Not sure what the right solution is here, if Gel needs to activate the gem before parsing the gemspecs.
set -ex
mkdir -p holder
cd holder
cat << GEMFILE > Gemfile
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "resque-pause", github: "wandenberg/resque-pause"
GEMFILE
gel lock
Hello. Very excited by gel :)
I'm on a brand new machine (mac) starting a new rails project (Exercism v3!) on Ruby 2.7.1. I'm using ruby-install and chruby. Running gel install
fails with sassc. Running bundle install
works. I suspect this may be a duplicate of #96, but would like to ideally leave it open so that I can try/test when that's added and start using gel :) If it's not a duplicate and there's something I'm doing wrong, any help would be greatly appreciated!
➜ gel install
Installed 0 of 1 gems
Errors encountered with 1 gems:
sassc
extconf exited with 1
===== Gel Internal Error =====
Traceback (most recent call last):
14: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
13: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:46:in `catch'
12: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
11: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:47:in `loop'
10: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:62:in `block (4 levels) in start'
9: from /usr/local/Cellar/gel/0.3.0/lib/gel/installer.rb:118:in `block (2 levels) in work_download'
8: from /usr/local/Cellar/gel/0.3.0/lib/gel/installer.rb:134:in `work_compile'
7: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:206:in `compile'
6: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:206:in `each'
5: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:209:in `block in compile'
4: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:154:in `compile_extconf'
3: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:88:in `with_build_environment'
2: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:88:in `open'
1: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:89:in `block in with_build_environment'
/usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:163:in `block in compile_extconf': extconf exited with 1 (RuntimeError)
Bundler supports vendoring gems into a specified directory. Some apps rely on this feature so they don't need to download from RubyGems if the gem is already present.
Once vendoring is implemented we'll want to have a way to clean the gems that are no longer used. To make that work for apps that dual-boot in multiple Rails version we'll need a way to set a list of gems to not clean.
@cloudtop:/dev/badge$ which gel/dev/badge$ eval "$(gel shell-setup)"
/usr/local/google/home/samphippen/.gem/ruby/2.5.3/bin/gel
@cloudtop:
@cloudtop:~/dev/badge$ gel install
===== Gel Internal Error =====
Traceback (most recent call last):
1: from /usr/local/google/home/samphippen/.gem/ruby/2.5.3/bin/gel:23:in <main>' /usr/local/google/home/samphippen/.gem/ruby/2.5.3/gems/gel-0.2.0/lib/gel/compatibility/rubygems.rb:150:in
activate_bin_path': Unknown gem "gel" (RuntimeError)
@cloudtop:~/dev/badge$
(at your cloned gel repository)
$ git co 2a17bdcc8095cf3df71f9df870d5f8fda7434a9b
$ ./exe/gel
Gel doesn't have a default command; please run `gel install`
$ git co cef7778c5e8fceb64ae549f2b4311d9eddd79fb4
$ ./exe/gel
...
uninitialized constant Gem (NameError)
It is breaking since cef7778. But the changes 2a17bdc...cef7778 look fine.
gem version: 3.0.1 (tried different gem versions, not relevant)
ruby: 2.6.3p62 (tried different rubies, not relevant)
Traceback (most recent call last):
20: from ./exe/gel:12:in `<main>'
19: from ./exe/gel:12:in `require_relative'
18: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/command.rb:3:in `<top (required)>'
17: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/command.rb:3:in `require_relative'
16: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/compatibility.rb:4:in `<top (required)>'
15: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/compatibility.rb:4:in `require_relative'
14: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/compatibility/rubygems.rb:9:in `<top (required)>'
13: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/compatibility/rubygems.rb:9:in `require_relative'
12: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/runtime.rb:3:in `<top (required)>'
11: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/runtime.rb:3:in `require_relative'
10: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel.rb:22:in `<top (required)>'
9: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel.rb:22:in `require_relative'
8: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/lock_loader.rb:3:in `<top (required)>'
7: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/lock_loader.rb:3:in `require_relative'
6: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:4:in `<top (required)>'
5: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:4:in `require_relative'
4: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/catalog.rb:9:in `<top (required)>'
3: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/catalog.rb:9:in `require_relative'
2: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/support/gem_platform.rb:9:in `<top (required)>'
1: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/support/gem_platform.rb:9:in `require'
/Users/juanitofatas/.rubies/ruby-2.6.1/lib/ruby/2.6.0/rubygems/deprecate.rb:24:in `<top (required)>': uninitialized constant Gem (NameError)
I traced down the error throws at here:
Line 22 in 6c964bd
gel/lock_loader.rb
=> gel/resolved_gem_set.rb
=> gel/catalog.rb
=> support/gem_platform.rb
=> require "rubygems/deprecate"
💥
How do we make Gem
available at Gel codebase?
To repro, clone puma and run gem install
from the gem root.
Traceback (most recent call last):
8: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/exe/gel:13:in `<main>'
7: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/command.rb:13:in `run'
6: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/command/install.rb:5:in `run'
5: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:419:in `activate'
4: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/lock_loader.rb:160:in `activate'
3: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:537:in `gems_from_lock'
2: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:537:in `each'
1: from /Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:538:in `block in gems_from_lock'
/Users/nateberkopec/.gem/ruby/2.6.3/gems/gel-0.3.0/lib/gel/store_gem.rb:31:in `require_paths': [["ext/puma_http11/extconf.rb"]] (RuntimeError)
I just spent ages (well, maybe 5 minutes) searching for this repo despite having starred it years ago. There are three issues:
bundle
, bundler
etc. (and impossible to find by searching for gem
).Suggestions:
[aaron@tc-lan-adapter ~/g/tenderhome (master)]$ cat Gemfile
gem 'ruby_home'
[aaron@tc-lan-adapter ~/g/tenderhome (master)]$ gel install
Fetching sources...
Resolving dependencies...
===== Gel Internal Error =====
Traceback (most recent call last):
9: from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/gems/2.7.0/gems/gel-0.3.0/exe/gel:13:in `<main>'
8: from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/gems/2.7.0/gems/gel-0.3.0/lib/gel/command.rb:13:in `run'
7: from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/gems/2.7.0/gems/gel-0.3.0/lib/gel/command/install.rb:5:in `run'
6: from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/gems/2.7.0/gems/gel-0.3.0/lib/gel/environment.rb:410:in `activate'
5: from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/gems/2.7.0/gems/gel-0.3.0/lib/gel/environment.rb:227:in `lock'
4: from /Users/aaron/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:41:in `work'
3: from /Users/aaron/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:69:in `propagate'
2: from /Users/aaron/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:69:in `reverse_each'
1: from /Users/aaron/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:72:in `block in propagate'
/Users/aaron/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:233:in `resolve_conflict': Could not find compatible versions (PubGrub::SolveFailure)
Because no versions satisfy ruby_home >= 0
and root depends on ruby_home >= 0,
version solving has failed.
I guess this is a PubGrub failure, but I'm not 100% sure. cc @jhawthorn
Today gel only support authentication of private gem sources when the user and password are n the URL. It would be good if we could change and store the authentication credentials outside of the Gemfile making possible for having per-user credentials.
@jhawthorn the other version-preference thing I need to look at next is the variant of install
/ update
that respects some or all of the existing locks, only changing what it must.
Do you have any thoughts on how we go about that? Is it as simple as sorting the previously-locked version to the top of the list ahead of the rest in normal order? That intuitively feels like it's too simplistic to work, but I can't come up with a reason it wouldn't. 🤔
When we run gel install
against following Gemfile
and there is no lockfile yet:
# frozen_string_literal: true
source "https://rubygems.org"
gem "railties"
resulted in an error:
Fetching sources....
Resolving dependencies....
===== Gel Internal Error =====
Traceback (most recent call last):
9: from /Users/juanitofatas/src/github.com/matthewd/gel/exe/gel:13:in `<main>'
8: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/command.rb:13:in `run'
7: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/command/install.rb:5:in `run'
6: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/environment.rb:361:in `activate'
5: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/environment.rb:299:in `lock'
4: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:161:in `dump'
3: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:113:in `block in dump'
2: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:113:in `each'
1: from /Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:117:in `block (2 levels) in dump'
/Users/juanitofatas/src/github.com/matthewd/gel/lib/gel/resolved_gem_set.rb:117:in `sort': comparison of Array with String failed (ArgumentError)
But if there already had a Gemfile.lock
, no error.
> bin/gel
Gel doesn't have a default command; please run `gel install`
What do you think about to add default command, like in bundler
, for running install?
sams-MBP:discourse sam$ eval "$(gel shell-setup)"
sams-MBP:discourse sam$ gel exec rails r 'User.first'
===== Gel Internal Error =====
Traceback (most recent call last):
1: from /Users/sam/.rbenv/versions/2.6.1/bin/gel:23:in `<main>'
/Users/sam/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/gel-0.2.0/lib/gel/compatibility/rubygems.rb:150:in `activate_bin_path': Unknown gem "gel" (RuntimeError)
Using rbenv/mac/bash/Ruby 2.6.1
It would be great to have a simple cli help doc.
gel -h
gel --help
Hi!
Given this gem file:
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "rails", "6.1.0"
gem "active_record_distinct_on"
bundler 2.1.4, throws this error:
Bundler could not find compatible versions for
gem "activemodel":
In snapshot (Gemfile.lock):
activemodel (= 6.0.3.4)
In Gemfile:
active_record_distinct_on was resolved to
0.1.7, which depends on
activerecord (>= 4.2, < 6.1) was resolved
to 6.0.3.4, which depends on
activemodel (= 6.0.3.4)
rails (= 6.1.0) was resolved to 6.1.0,
which depends on
activemodel (= 6.1.0)
Running `bundle update` will rebuild your
snapshot from scratch, using only
the gems in your Gemfile, which may resolve the
conflict.
while gel install
runs successfully.
active_record_distinct_on gemspec specifies - < 6.1
on rails version - https://github.com/alecdotninja/active_record_distinct_on/blob/master/active_record_distinct_on.gemspec#L20
Looks like a bug in gel, or something else which I don't understand.
I really like the feature of bundler to easily clone repos from GitHub by specifying the repository path using the github
flag:
gem 'nokogiri', :github => 'tenderlove/nokogiri'
Would be awesome if Gel also supports that feature. Since I already said that I want to get more involved into this project, I can also try adding support for that flag 👍
Installing alpha3 and having run rm -rf ~/.local/gel
then running gel install
for Rails gets me:
Errors encountered with 4 gems:
eventmachine
won't overwrite /Users/kaspth/.local/gel/ruby/gems/pub_grub-0.5.0.alpha3/.gitignore
websocket-driver
won't overwrite /Users/kaspth/.local/gel/ruby/gems/pub_grub-0.5.0.alpha3/.gitignore
ffi
won't overwrite /Users/kaspth/.local/gel/ruby/gems/pub_grub-0.5.0.alpha3/.gitmodules
thin
Depends on "eventmachine", which failed to compile
===== Gel Internal Error =====
Traceback (most recent call last):
22: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
21: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/work_pool.rb:46:in `catch'
20: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
19: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/work_pool.rb:47:in `loop'
18: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/work_pool.rb:62:in `block (4 levels) in start'
17: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/installer.rb:69:in `block (2 levels) in install_gem'
16: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/installer.rb:111:in `work_download'
15: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:124:in `extract'
14: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:124:in `open'
13: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:125:in `block in extract'
12: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/support/tar/tar_reader.rb:29:in `new'
11: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:142:in `block (2 levels) in extract'
10: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package/installer.rb:16:in `gem'
9: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:143:in `block (3 levels) in extract'
8: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:107:in `with_file'
7: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/support/tar/tar_reader.rb:116:in `seek'
6: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:119:in `block in with_file'
5: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:144:in `block (4 levels) in extract'
4: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/support/tar/tar_reader.rb:29:in `new'
3: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:145:in `block (5 levels) in extract'
2: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/support/tar/tar_reader.rb:65:in `each'
1: from /Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package.rb:146:in `block (6 levels) in extract'
/Users/kaspth/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/gel-2.0.0.alpha3/lib/gel/package/installer.rb:248:in `file': won't overwrite /Users/kaspth/.local/gel/ruby/gems/pub_grub-0.5.0.alpha3/.gitignore (RuntimeError)
Rerunning gel install
right after succeeds:
kaspth@kaspth-imac:~/code/rails/activerecord (master)$ gel install
Installing websocket-driver (0.7.0)
Installing eventmachine (1.2.7)
Installing thin (1.7.2)
Installing ffi (1.10.0)
Installed 4 gems
@matthewd knows what's up:
All the compiled gems try to build a temporary lockfile at the same time, and because it's the first run, they all decide they need to install pub_grub to do so
Uh oh, looks like there might be trouble in Gel::WorkPool
, or something:
$ gel install
Installing msgpack (1.3.1)
[Compiling: +1]Traceback (most recent call last):
10: from /Users/sj26/Projects/gel/exe/gel:13:in `<main>'
9: from /Users/sj26/Projects/gel/lib/gel/command.rb:13:in `run'
8: from /Users/sj26/Projects/gel/lib/gel/command/install.rb:5:in `run'
7: from /Users/sj26/Projects/gel/lib/gel/environment.rb:370:in `activate'
6: from /Users/sj26/Projects/gel/lib/gel/lock_loader.rb:68:in `activate'
5: from /Users/sj26/Projects/gel/lib/gel/lock_loader.rb:68:in `new'
4: from /Users/sj26/Projects/gel/lib/gel/work_pool.rb:30:in `initialize'
3: from /Users/sj26/Projects/gel/lib/gel/lock_loader.rb:106:in `block in activate'
2: from /Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `wait'
1: from /Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `each'
/Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `join': No live threads left. Deadlock? (fatal)
13 threads, 13 sleeps current:0x00007fc84be0fb10 main thread:0x00007fc8466057a0
* #<Thread:0x00007fc847060010 sleep_forever>
rb_thread_t:0x00007fc8466057a0 native:0x00000001076625c0 int:0
/Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `join'
/Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `each'
/Users/sj26/Projects/gel/lib/gel/installer.rb:193:in `wait'
/Users/sj26/Projects/gel/lib/gel/lock_loader.rb:106:in `block in activate'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:30:in `initialize'
/Users/sj26/Projects/gel/lib/gel/lock_loader.rb:68:in `new'
/Users/sj26/Projects/gel/lib/gel/lock_loader.rb:68:in `activate'
/Users/sj26/Projects/gel/lib/gel/environment.rb:370:in `activate'
/Users/sj26/Projects/gel/lib/gel/command/install.rb:5:in `run'
/Users/sj26/Projects/gel/lib/gel/command.rb:13:in `run'
/Users/sj26/Projects/gel/exe/gel:13:in `<main>'
* #<Thread:0x00007fc84ada37b0@/Users/sj26/Projects/gel/lib/gel/installer.rb:186 sleep_forever>
rb_thread_t:0x00007fc84be0f580 native:0x000070000d594000 int:0
depended by: tb_thread_id:0x00007fc8466057a0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:104:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:101:in `wait'
/Users/sj26/Projects/gel/lib/gel/installer.rb:189:in `block (2 levels) in wait'
* #<Thread:0x00007fc84ada3698@/Users/sj26/Projects/gel/lib/gel/installer.rb:186 sleep_forever>
rb_thread_t:0x00007fc84be0fb10 native:0x000070000d697000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:104:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:101:in `wait'
/Users/sj26/Projects/gel/lib/gel/installer.rb:189:in `block (2 levels) in wait'
* #<Thread:0x00007fc84ada3558@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be0ffa0 native:0x000070000d79a000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84ada3418@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be10430 native:0x000070000d89d000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84ada3328@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be108f0 native:0x000070000d9a0000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84ada3238@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be10db0 native:0x000070000daa3000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84ada3148@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be11270 native:0x000070000dba6000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84ada3058@gel-download@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84be11730 native:0x000070000dca9000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84b613170@gel-compile@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84b914970 native:0x000070000ddac000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84b612e78@gel-compile@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84ba6de60 native:0x000070000deaf000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84b612c20@gel-compile@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84ba34bc0 native:0x000070000dfb2000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
* #<Thread:0x00007fc84b612a40@gel-compile@/Users/sj26/Projects/gel/lib/gel/work_pool.rb:42 sleep_forever>
rb_thread_t:0x00007fc84ba31ff0 native:0x000070000e0b5000 int:0
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `sleep'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:111:in `block (2 levels) in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:110:in `block in wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `handle_interrupt'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:106:in `wait'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:134:in `wait_until'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:51:in `block (5 levels) in start'
/usr/local/rbenv/versions/2.6.2/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:49:in `block (4 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `loop'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `catch'
/Users/sj26/Projects/gel/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
This was happening repeatedly for me. :-(
I'm stuck with that:
[Downloading: activesupport activemodel activestorage activejob railties activerecord +88]
maybe it's using the bundler compatibility layer because that's an issue I have with bundler too (but not when manually using git)
this is what is in my Gemfile
:
gem 'rails', github: 'rails/rails'
I tried the gel gem today it's blazing fast I love it. But the project I ran it on today, failed. After working with it and jumping between a few of my projects to test out a few theories before raising an issue.
One of the issues I came across is if you have an if_install
conditional statement in your gemfile it'll catch with an exception. I have this in a few of my gemfiles. That way I can use mini_racer when developing locally, but if I'm deploying it on an Alpine docker image it won't install this gem (this is because Alpine uses musl instead of glibc).
ERROR: Failed to evaluate "/Users/FakeUser/Desktop/ProjectName/Gemfile": undefined method 'install_if' for #<Gel::GemfileParser::ParseContext:0x0000000107cc84b0>
Below is the snip form my gemfile
install_if -> { !(RUBY_PLATFORM =~ /linux-musl/) } do
gem 'mini_racer', platforms: :ruby # C based alternative instead of rubyracer
end
It also seems to fail on installing several gems that has a C extension associated with the gem.
For example two gems that failed to install were sassc-rails
and pg
. Strangely enough it does install gems such as fast_blank
, I'm thinking maybe this is because the C file is included in the gems ext directory, rather than an external library that the gem needs to compile the extension for.
```shell
Errors encountered with 1 gems:
pg
extconf exited with 1
===== Gel Internal Error =====
Traceback (most recent call last):
14: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
13: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/work_pool.rb:46:in `catch'
12: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
11: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/work_pool.rb:47:in `loop'
10: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/work_pool.rb:62:in `block (4 levels) in start'
9: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/installer.rb:118:in `block (2 levels) in work_download'
8: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/installer.rb:134:in `work_compile'
7: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:206:in `compile'
6: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:206:in `each'
5: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:209:in `block in compile'
4: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:154:in `compile_extconf'
3: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:88:in `with_build_environment'
2: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:88:in `open'
1: from /Users/FakeUser/.rvm/gems/ruby-2.6.1@tasky/gems/gel-0.3.0/lib/gel/package/installer.rb:89:in `block in with_build_environment'
/Users/FakeUser/.rvm/gems/ruby-2.6.1@FakeApp/gems/gel-0.3.0/lib/gel/package/installer.rb:163:in `block in compile_extconf': extconf exited with 1 (RuntimeError)
Hi there,
If I have an existing Gemfile.lock in the current directory / project root and run gel lock
then I get the following:
$ gel lock
Fetching sources....
Resolving dependencies...
Writing lockfile to PROJECT_ROOT/Gemfile.lock
It always works if the lock file exists.
If it doesn't exist then it decides to put it in a parent of the project root. The first time I ran it, it was one level up, 2nd time it's 3 levels up… and I just ran it again after removing the lock file and this time it placed it in the project root.
I haven't looked into why, I'll do that now and report back if I find anything.
Aside from that, amazed by the speed of it, great work!
Regards,
iain
To ease upgrading Rails versions we have multiple Gemfile.lock's. I think that ideally we'd support something like https://github.com/shopify/bootboot that let's you set an env var to flip between different Rails versions (or other versions) and can have 2+ lock files. I don't think gel should only support 2 lock files, it should support as many as an app wants.
I tried doing these things on rbenv-managed ruby 2.6.1p33
, installing, uninstalling, and reinstalling gel:
$ gem install gel
$ eval "$(gel shell-setup)"
$ gel
$ gem uninstall gel
$ rm -rf ~/.local/gel
$ gem install gel
Now, running any gel command gives this error:
$ gel
===== Gel Internal Error =====
Traceback (most recent call last):
1: from /Users/justin/.rbenv/versions/2.6.1/bin/gel:23:in `<main>'
/Users/justin/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/gel-0.2.0/lib/gel/compatibility/rubygems.rb:150:in `activate_bin_path': Unknown gem "gel" (RuntimeError)
Thoughts? What's the right way to uninstall/reinstall gel? (The reason I'd like to be able to implode and reinstall gel easily is to more accurately replicate any issues I find)
I was trying to install the HEAD of gel via homebrew by adding a head "https://github.com/gel-rb/gel.git"
to the hombrew formula, but it fails while generating man pages with:
ronn --roff --manual 'Gel Manual' man/man1/gel-exec.1.ronn man/man1/gel-install.1.ronn man/man1/gel.1.ronn
/private/tmp/gel-20190807-63682-1ivzf57/lib/gel/catalog/marshal_hacks.rb:3:in `<top (required)>': uninitialized constant Gem (NameError)
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/catalog/dependency_index.rb:10:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/catalog/dependency_index.rb:10:in `<top (required)>'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/catalog.rb:152:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/catalog.rb:152:in `<top (required)>'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:10:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:10:in `initialize'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:84:in `new'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:84:in `block (2 levels) in load'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:59:in `each'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:59:in `block in load'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:55:in `each'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/resolved_gem_set.rb:55:in `load'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/lock_loader.rb:9:in `initialize'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/environment.rb:365:in `new'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/environment.rb:365:in `activate'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/runtime.rb:26:in `<top (required)>'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/compatibility/rubygems.rb:9:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/compatibility/rubygems.rb:9:in `<top (required)>'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/compatibility.rb:4:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/compatibility.rb:4:in `<top (required)>'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/command.rb:3:in `require_relative'
from /private/tmp/gel-20190807-63682-1ivzf57/lib/gel/command.rb:3:in `<top (required)>'
from bin/gel:12:in `require_relative'
from bin/gel:12:in `<main>'
rake aborted!
Command failed with status (1): [ronn --roff --manual 'Gel Manual' man/man1...]
/private/tmp/gel-20190807-63682-1ivzf57/Rakefile:44:in `block in <top (required)>'
-e:1:in `<main>'
Tasks: TOP => man
(See full trace by running task with --trace)
lib/gel/catalog/marshal_hacks.rb
seems to presume the the Gem
module exists, but this is being required in the same stack that is trying to load the lib/gel/compatibility/rubygems.rb
file which defines the module. Any ideas?
I don't mind working on the UI to help get something up for gel, I ran some benchmarks and wanted to clarify the direction before opening up a PR.
require 'benchmark/ips'
require "thor"
shell = Thor::Base.shell.new
Benchmark.ips do |x|
x.config(:time => 1, :warmup => 2)
x.report("puts") do |times|
puts 'Gel...'
end
x.report("stderr") do |times|
STDERR.puts 'Gel***'
end
x.report('thor') do |times|
shell.say("Gel===")
end
x.report('echo') do |times|
%x( echo 'Gel~~~' )
end
x.report('subshell') do |times|
system( "echo 'Gel>>>'" )
end
x.report('backtrix') do |times|
`echo 'Gel%%%'`
end
# Exec exits current process, not considering
# x.report('exec') do |times|
# exec( "echo 'Gel%%%'" )
# end
# Add colour: would it work in windows? Read somewhere windows needs something else to make this work,
# perhaps windows 10 just works, who cares?
color_code = 31 # red
message = "Gel+++".freeze
x.report('stderr_red') do |times|
STDERR.puts("\e[#{color_code}m#{message}\e[0m")
end
x.report('thor_red') do |times|
shell.say("Gel&&&", :red)
end
x.compare!
end
The results I got back;
1.159B (±19.2%) i/s - 1.021B in 0.967686s
Comparison:
stderr: 6807884957.6 i/s
puts: 6669602986.8 i/s - same-ish: difference falls within error
stderr_red: 5419178831.1 i/s - same-ish: difference falls within error
thor: 3100900669.8 i/s - 2.20x slower
thor_red: 1158742043.2 i/s - 5.88x slower
subshell: 9302.5 i/s - 731832.21x slower
echo: 9074.3 i/s - 750238.34x slower
backtrix: 9067.0 i/s - 750839.19x slower
Thor is used by bundler, even rails, it's slow - you mentioned making gel fast as possibly, are you happy to use STDERR?
Had a look at the UI for bundler, how do you want the api to look for Gel::UI?
UI.info(message)
UI.warn(message)
Already install gems should not fail after the first run with a non-zero error. This is happening with the case of ruby_parser
. See dockerfile:
FROM ruby:2.6.4-alpine
RUN apk --no-cache update && apk add --update alpine-sdk tzdata linux-headers
gem update --system && gem install gel && \
apk add --update postgresql-client postgresql-dev && \
apk add --update nodejs
RUN mkdir -p /app
WORKDIR /app
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["rackup", "--host", "0.0.0.0", "-p", "3000"]
ADD Gemfile Gemfile.lock .ruby-version ./
RUN gel install --jobs 5
COPY . ./
The error is dispatched locally and in the pipeline(just trying to see time improvement in real environments branches):
I was trying to run gel install
in a library I was considering as a gem, it had a gemspec but was yet to be pushed to Rubygems. I'm investigating why as sometimes it appears to install fine but in the meantime I'll put this here. I know it happens on both master (d5e4aa3) and v0.3.0 and Ruby 2.6.3 and 2.7.0.
I've pushed up the library to Github and to Rubygems (and yanked it) for investigating this, but here's the original error message:
$ gel install
Fetching sources.....
Resolving dependencies...
===== Gel Internal Error =====
Traceback (most recent call last):
10: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/exe/gel:13:in `<main>'
9: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/lib/gel/command.rb:13:in `run'
8: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/lib/gel/command/install.rb:5:in `run'
7: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/lib/gel/environment.rb:366:in `activate'
6: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/lib/gel/environment.rb:328:in `write_lock'
5: from /Users/iainb/.gem/ruby/2.6.3/gems/gel-0.3.0a/lib/gel/environment.rb:232:in `solve_for_gemfile'
4: from /Users/iainb/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:41:in `work'
3: from /Users/iainb/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:69:in `propagate'
2: from /Users/iainb/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:69:in `reverse_each'
1: from /Users/iainb/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:72:in `block in propagate'
/Users/iainb/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:233:in `resolve_conflict': Could not find compatible versions (PubGrub::SolveFailure)
Because every version of [[gemfile]] depends on Docopted (ruby) >= 0
and no versions satisfy Docopted (ruby) >= 0,
every version of [[gemfile]] is forbidden.
So, because every version of [[root]] depends on [[gemfile]] >= 0
and (root dependency),
version solving has failed.
Regards,
iain
bootsnap gem (this is a rails 5 app), calls Bundler.bundle_path.cleanpath
) which fails:
> be rake -T
Unknown lockfile section "RUBY VERSION"
Unknown lockfile section "RUBY VERSION"
rake aborted!
NoMethodError: undefined method `bundle_path' for Bundler:Module
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/path_scanner.rb:14:in `<module:PathScanner>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/path_scanner.rb:7:in `<module:LoadPathCache>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/path_scanner.rb:6:in `<module:Bootsnap>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/path_scanner.rb:5:in `<top (required)>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache.rb:71:in `require_relative'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache.rb:71:in `<top (required)>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap.rb:3:in `require_relative'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap.rb:3:in `<top (required)>'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/setup.rb:1:in `require_relative'
/Users/viktor/.local/gel/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/setup.rb:1:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/usr/local/Cellar/gel/0.2.0/lib/gel/compatibility/rubygems.rb:188:in `require'
/Users/viktor/Developer/pop/config/boot.rb:6:in `<top (required)>'
/Users/viktor/Developer/pop/config/application.rb:3:in `require_relative'
/Users/viktor/Developer/pop/config/application.rb:3:in `<top (required)>'
/Users/viktor/Developer/pop/Rakefile:6:in `require_relative'
/Users/viktor/Developer/pop/Rakefile:6:in `<top (required)>'
/Users/viktor/.local/gel/ruby/gems/rake-12.3.2/exe/rake:27:in `<top (required)>'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/exec.rb:34:in `load'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/exec.rb:34:in `run'
/usr/local/Cellar/gel/0.2.0/lib/gel/command/stub.rb:8:in `run'
/usr/local/Cellar/gel/0.2.0/lib/gel/command.rb:13:in `run'
/usr/local/bin/gel:13:in `<main>'
(See full trace by running task with --trace)
Ruby 2.6.3
Bundler 1.17.3
~/.zshrc
:
eval "$(gel shell-setup)"
When I remove this line from my ~/.zshrc
, bundle exec
works as expected.
Given the following Gemfile, bundle install
works, but gel install
fails with this error:
ERROR: Failed to evaluate "/Users/stevendaniels/gel_test/Gemfile": wrong number of arguments (given 2, expected 1)
/Users/stevendaniels/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/gel-0.3.0/lib/gel/gemfile_parser.rb:41:in `ruby'
/Users/stevendaniels/gel_test/Gemfile:3:in `parse'
# Gemfile
source "https://rubygems.org"
ruby ">= 2.5.0", "< 2.7.0"
gem "gel"
Bundler handles ruby versions here and here.
Line 41 in 6c964bd
I've been getting some odd errors when starting Puma using gel:
Traceback (most recent call last):
20: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/bin/puma-wild:31:in `<main>'
19: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cli.rb:78:in `run'
18: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/launcher.rb:184:in `run'
17: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:466:in `run'
16: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:133:in `spawn_workers'
15: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:133:in `times'
14: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:137:in `block in spawn_workers'
13: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:137:in `fork'
12: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:137:in `block (2 levels) in spawn_workers'
11: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/cluster.rb:273:in `worker'
10: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/runner.rb:162:in `start_server'
9: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/runner.rb:155:in `app'
8: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/configuration.rb:243:in `app'
7: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/configuration.rb:318:in `load_rackup'
6: from /Users/sj26/.local/gel/2.6.0/gems/puma-3.12.0/lib/puma/configuration.rb:305:in `rack_builder'
5: from /usr/local/Cellar/gel/0.3.0/lib/gel/compatibility/rubygems.rb:197:in `require'
4: from /usr/local/Cellar/gel/0.3.0/lib/gel/environment.rb:581:in `resolve_gem_path'
3: from /usr/local/Cellar/gel/0.3.0/lib/gel/locked_store.rb:87:in `gems_for_lib'
2: from /usr/local/Cellar/gel/0.3.0/lib/gel/locked_store.rb:87:in `each'
1: from /usr/local/Cellar/gel/0.3.0/lib/gel/locked_store.rb:87:in `block in gems_for_lib'
/usr/local/Cellar/gel/0.3.0/lib/gel/environment.rb:583:in `block in resolve_gem_path': undefined method `name' for nil:NilClass (NoMethodError)
It's coming from here:
https://github.com/gel-rb/gel/blob/v0.3.0/lib/gel/environment.rb#L583
I added a pp(path: path, subdir: subdir) if gem.nil?
in there and got:
{:path=>"active_record/railtie", :subdir=>nil}
{:path=>"i18n", :subdir=>nil}
Then I ran it again and got:
{:path=>"active_support", :subdir=>nil}
{:path=>"i18n", :subdir=>nil}
It seems to change subtly on each invocation. Race condition?
Hi again,
For context, I'm trying to install and serve a Jekyll site in a Docker container. The Gemfile has this:
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
gem "hitchens-theme", github: "yb66/hitchens.git"
The install via gel install
appears to work:
<snip>
Installing eventmachine (1.2.7)
Using hitchens-theme (git)
Installing sassc (2.2.1)
Installed 28 gems
But it fails when Bundler gets involved via bundle exec
bundler: failed to load command: jekyll (/usr/local/bundle/bin/jekyll)
Bundler::GitError: The git source https://github.com/yb66/hitchens.git is not yet checked out. Please run `bundle install` before trying to start your application
If I jump into the container and install via Bundler and then run bundle exec
… Jekyll will start.
The key difference I've found thus far is in where Bundle and Gel put checkouts:
/site # find $GEM_HOME -name 'hitchens*'
/usr/local/bundle/cache/bundler/git/hitchens-03bc3dae44cad582230abce3c4a35d47a4d95749
/usr/local/bundle/bundler/gems/hitchens-d80fd495f6bd
/usr/local/bundle/bundler/gems/hitchens-d80fd495f6bd/hitchens-theme.gemspec
/site # find / -name 'hitchens*'
/root/.local/gel/git/hitchens-d80fd495f6bda
/root/.local/gel/git/hitchens-d80fd495f6bda/hitchens-theme.gemspec
/root/.cache/gel/git/hitchens-029cb425975f5
I'm trying to understand the GitDepot class and what's happening around it and I'll start trying a few things but any thoughts or pointers are welcome.
Regards,
iain
ERROR: Failed to evaluate ".../Gemfile": Duplicate entry for gem "pry-rails"
This is what I have in Gemfile:
gem "pry-rails", require: "pry-rails/console", group: [:production]
group :development, :test do
gem "pry-rails"
...
I think that should add gel init
command like in bundler, for init Gemfile
When I think of "gem management" I think of "bundler".
https://github.com/gel-rb/gel/i
also is a "gem manager".
So it would be useful to have in the README a subsection about how it differs-from/competes-with the old' classic - that is bundler.
Hi!
I am trying moving to gel on my main repo and I fail to install rdkafka-ruby
Gemfile:
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "rdkafka", git: "https://github.com/bringg/rdkafka-ruby", branch: "add_response_to_delivery_report"
Output:
λ ~/code/gel-test/ gel install
Fetching sources.....
Resolving dependencies....
Writing lockfile to /Users/yosi/code/bringg/gel-test/Gemfile.lock
Installing ffi (1.11.2)
Installed 1 gems
===== Gel Internal Error =====
Traceback (most recent call last):
8: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/exe/gel:13:in `<main>'
7: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/command.rb:13:in `run'
6: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/command/install.rb:5:in `run'
5: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:419:in `activate'
4: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/lock_loader.rb:160:in `activate'
3: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:537:in `gems_from_lock'
2: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:537:in `each'
1: from /Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/environment.rb:538:in `block in gems_from_lock'
/Users/yosi/.rvm/gems/ruby-2.6.3/gems/gel-0.3.0/lib/gel/store_gem.rb:31:in `require_paths': ["/Users/yosi/.local/gel/git/rdkafka-ruby-19bbeef9cf38c/lib", ["ext/Rakefile"]] (RuntimeError)
The problems happen only if I install it from git
, otherwise it just works.
If you can direct me through I can submit a PR to fix it.
If I run test_interleaved_async_requests repeatedly
, it deadlocks (maybe others?).
I use autoclave, but you could just run it in a loop and wait until it hands.
autoclave -v -r 50 -t 2 bin/metaruby -Itest test/tail_file_test.rb -n 'test_interleaved_async_requests'
We have a gemfile with a few custom source "..." { ... }
blocks. Gems inside these blocks are listed in the Gemfile.lock under DEPENDENCIES with a "!" suffix by bundler, but the "!" is stripped by Gel, leading to diffs like:
diff --git a/Gemfile.lock b/Gemfile.lock
index 3cf7a354ed..d3b204c269 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -647,7 +647,7 @@ DEPENDENCIES
gitable
graphql
graphql-batch
- graphql-pro
+ graphql-pro!
hiredis
html-pipeline
http
@@ -720,8 +720,8 @@ DEPENDENCIES
selenium-webdriver
sidekiq
sidekiq-cloudwatchmetrics
- sidekiq-ent
- sidekiq-pro
+ sidekiq-ent!
+ sidekiq-pro!
simple_oauth
simplecov
simplecov-buildkite
$ gel update mini_magick --strict
Fetching sources....
Resolving dependencies...
===== Gel Internal Error =====
Traceback (most recent call last):
10: from .../gel/exe/gel:13:in `<main>'
9: from .../gel/lib/gel/command.rb:13:in `run'
8: from .../gel/lib/gel/command/update.rb:8:in `run'
7: from .../gel/lib/gel/command/lock.rb:32:in `run'
6: from .../gel/lib/gel/environment.rb:228:in `lock'
5: from ~/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:40:in `work'
4: from ~/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/version_solver.rb:134:in `choose_package_version'
3: from ~/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/basic_package_source.rb:134:in `incompatibilities_for'
2: from ~/.local/gel/ruby/gems/pub_grub-0.5.0/lib/pub_grub/basic_package_source.rb:113:in `block (2 levels) in initialize'
1: from .../gel/lib/gel/pub_grub/source.rb:68:in `dependencies_for'
.../gel/lib/gel/pub_grub/preference_strategy.rb:38:in `constraints': private method `ranges' called for #<Gel::PubGrub::PreferenceStrategy:0x00007fb9c6a71408> (NoMethodError)
I ran gel install
on a project that had previously been using Bundler. It installed 78 gems and exited cleanly .
Next, I ran gel lock
and it wrote these changes to my Gemfile.lock
:
diff --git a/Gemfile.lock b/Gemfile.lock
index 729d812..e8de581 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -202,7 +202,4 @@ DEPENDENCIES
webpacker
RUBY VERSION
- ruby 2.6.0p0
-
-BUNDLED WITH
- 1.17.3
+ ruby 2.6.1p33
But it also output this warning:
Unknown lockfile section "RUBY VERSION"
The warning now prints whenever I run gel lock
or gel install
.
This seemed odd to me since gel also printed the Ruby version to the lockfile.
Seem there are some issues when installing aws-sdk-resources
. And here is the log.
===== Gel Internal Error =====
Traceback (most recent call last):
21: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:46:in `block (2 levels) in start'
20: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:46:in `catch'
19: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:47:in `block (3 levels) in start'
18: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:47:in `loop'
17: from /usr/local/Cellar/gel/0.3.0/lib/gel/work_pool.rb:62:in `block (4 levels) in start'
16: from /usr/local/Cellar/gel/0.3.0/lib/gel/installer.rb:69:in `block (2 levels) in install_gem'
15: from /usr/local/Cellar/gel/0.3.0/lib/gel/installer.rb:122:in `work_download'
14: from /usr/local/Cellar/gel/0.3.0/lib/gel/installer.rb:140:in `work_install'
13: from /usr/local/Cellar/gel/0.3.0/lib/gel/package/installer.rb:224:in `install'
12: from /usr/local/Cellar/gel/0.3.0/lib/gel/store.rb:39:in `add_gem'
11: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:81:in `writing'
10: from /Users/adam00/.rbenv/versions/2.6.5/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
9: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:84:in `block in writing'
8: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:157:in `writing'
7: from /usr/local/Cellar/gel/0.3.0/lib/gel/store.rb:53:in `block in add_gem'
6: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:130:in `[]='
5: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:212:in `[]='
4: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:212:in `map'
3: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:212:in `each'
2: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:212:in `times'
1: from /usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:213:in `block in []='
/usr/local/Cellar/gel/0.3.0/lib/gel/db.rb:213:in `[]=': sdbm_store failed (SDBMError)
Since gel serves as an alternative to both the gem
and bundle
CLIs, some basic commands for dealing with one-off gem installations outside the context of a Gemfile would be neat.
$ gel install standard
Should, I would think, install the latest version of standard and point a shim to it in gel's binstubs.
(This seems necessary to me, because right now the only way to create a Rails project with gel would be to first create a Gemfile
that contains gem "rails"
and run gel install
, which would then let us run rails new
from other directories)
@jhawthorn testing on buildkite/buildkite*, I just encountered a variant of https://github.com/matthewd/paperback/blob/6773b9fb9cc3bb0682e9fe63aac90bf33f75707d/test/resolve_test.rb#L486-L494
Specifically, note that the foreman/thor versions change if you remove gem "thunk"
, even though its dependency is non-restrictive.
Neither is wrong: the latest foreman is only compatible with older thor, and the latest thor is only compatible with older foreman. My intuition is that we should prefer the newer version of the more direct dependency... which is also how Bundler resolved my real scenario. I haven't researched whether that's conscious choice, or just a different arbitrary decision, but I figured it's at least worth a look: do you know if this is something we can affect by e.g. sorting, or best dismissed as unimportant?
(Removing gem "dotenv"
changes things too, but that one seems even more like both answers are equally right, as it's duelling top-level dependencies.)
* 14s paperback lock
vs 74s bundle lock
, but only 2s of ours was resolution -- the other 12s were all slow requests that I need to speed up, cache, or parallelize.
getting the following when running gel install
:
ERROR: Failed to evaluate "/Users/jpowell/src/spree/Gemfile": undefined method 'eval_gemfile' for #<Gel::GemfileParser::ParseContext:0x00007f865c0da810>
/Users/jpowell/src/spree/Gemfile:1:in `parse'
see: eval_gemfile
on Spree, which shares common dependencies across component engines:
https://github.com/spree/spree/blob/756c8657a11291feb009bce901363963fa3b5d9d/Gemfile#L1
Is there a way to handle with gel?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.