grafana / pyroscope-rs

Pyroscope Profiler for Rust. Profile your Rust applications.
Apache License 2.0
132 stars 22 forks source link

installing pyroscope 0.5.1 in bundler #83

Closed Greg-Myers-SB closed 1 year ago

Greg-Myers-SB commented 1 year ago

Describe the bug you encountered: This works fine

gem install pyroscope

This causes a large exception

bundle init
echo "gem 'pyroscope'" >> Gemfile
bundle

Returns

Fetching gem metadata from https://rubygems.org/...
Resolving dependencies...
Using bundler 2.3.22
Using ffi 1.15.5
Installing pyroscope 0.5.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/pyroscope-0.5.1/ext/rbspy
/Users/me/.rbenv/versions/3.0.4/bin/ruby -I /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0 -r ./siteconf20230217-37601-8om20a.rb extconf.rb
creating Makefile
cargo rustc --locked --release --target=aarch64-apple-darwin -- -C linker=clang -C link-arg=-fdeclspec -L native=/Users/me/.rbenv/versions/3.0.4/lib -L native=/Users/me/.rbenv/versions/3.0.4/lib -L native=/opt/homebrew/opt/openssl@3/lib -C
link_arg=-Wl,-undefined,dynamic_lookup -C link_arg=-Wl,-multiply_defined,suppress
    Updating git repository `https://github.com/omarabid/rbspy.git`
    Updating git repository `https://github.com/omarabid/read-process-memory.git`
error: failed to get `ffikit` as a dependency of package `rbspy v0.1.0 (/Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/pyroscope-0.5.1/ext/rbspy)`

Caused by:
  failed to load source for dependency `ffikit`

Caused by:
  Unable to update /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/ffikit

Caused by:
  failed to read `/Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/ffikit/Cargo.toml`

Caused by:
  No such file or directory (os error 2)
/Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/file_utils.rb:67:in `block in create_shell_runner': Command failed with status (101): [cargo rustc --locked --release --target=aa...] (RuntimeError)
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/file_utils.rb:57:in `sh'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/pyroscope-0.5.1/ext/rbspy/Rakefile:134:in `block in <top (required)>'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:243:in `block in invoke_prerequisites'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `each'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `invoke_prerequisites'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:243:in `block in invoke_prerequisites'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `each'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `invoke_prerequisites'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
    from /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
    from extconf.rb:11:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/pyroscope-0.5.1 for inspection.
Results logged to /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/extensions/arm64-darwin-21/3.0.0/pyroscope-0.5.1/gem_make.out

  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/builder.rb:93:in `run'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:47:in `block in build'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/builder.rb:159:in `build_extension'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/builder.rb:193:in `block in build_extensions'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `each'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `build_extensions'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/3.0.0/rubygems/installer.rb:837:in `build_extensions'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/rubygems_gem_installer.rb:72:in `build_extensions'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/source/rubygems.rb:207:in `install'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/installer/gem_installer.rb:54:in `install'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/worker.rb:62:in `apply_func'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/worker.rb:57:in `block in process_queue'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/worker.rb:54:in `loop'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/worker.rb:54:in `process_queue'
  /Users/me/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/bundler-2.3.22/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing pyroscope (0.5.1), and Bundler cannot continue.

In Gemfile:
  pyroscope

...

What did you expect to happen instead?

...

How did you install pyroscope-rs?


pyroscope-rs version and environment

MacOS 13.2 ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [arm64-darwin21] Bundler version 2.3.22 rustup 1.25.1 (2022-07-12) rustc 1.67.1 (d5a82bbd2 2023-02-07) cargo 1.67.1 (8ecd4f20a 2023-01-10)

korniltsev commented 1 year ago

As of now, building gem from source is not supported, although I want to allow it in the future. Right now to use pyroscope we need to use platform specific binaries.

Do you have something like this in your lock file? https://github.com/pyroscope-io/pyroscope/blob/main/examples/ruby/rideshare_rails/Gemfile.lock#L230

If no, try to execute bundle lock --add-platform arm64-darwin-21 This should force downloading a gem with prebuilt arm binaries

Greg-Myers-SB commented 1 year ago

Aha! Thanks for the tip on platforms there, this was likely caused by my use of force_ruby_platform

$ bundle config
force_ruby_platform
Set for the current user (/Users/me/.bundle/config): true

Unsetting it fixed my above problem

$ bundle config force_ruby_platform false
$ bundle config
force_ruby_platform
Set for your local app (/Users/me/projects/pyroscope-test/.bundle/config): false
$ bundle
Fetching gem metadata from https://rubygems.org/..
Using ffi 1.15.5
Using bundler 2.3.22
Fetching pyroscope 0.5.1 (arm64-darwin)
Installing pyroscope 0.5.1 (arm64-darwin)
Bundle complete! 1 Gemfile dependency, 3 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

If it's unintended for this gem to be compiled then I'm happy for this to be closed. Thanks for the help!