enable remote debugging in docker
Hi,
I try to implement remote debugging like explained here:
http://bzzt.io/posts/running-the-rails-debugger-in-a-docker-container-using-rubymine
I have a jruby 9.1 rails application running in docker.
In my Gemfile I have under the development section -->
gem 'debase', '~>0.2.2.beta10', require: false
However, I get an error on "docker build"
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /usr/local/bundle/gems/debase-0.2.2.beta10/ext
/opt/jruby/bin/jruby -r ./siteconf20170609-7-1ef9cbf.rb extconf.rb
checking for vm_core.h... RuntimeError: The compiler failed to generate an
executable file.
You have to install development tools first.
....
I have development tools installed in docker ! -->
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
(1/51) Installing fakeroot (1.21-r1)
(2/51) Installing sudo (1.8.19_p1-r0)
(3/51) Installing libcap (2.25-r1)
(4/51) Installing pax-utils (1.1.6-r0)
(5/51) Installing libressl (2.4.4-r0)
(6/51) Installing libattr (2.4.47-r4)
(7/51) Installing attr (2.4.47-r4)
(8/51) Installing tar (1.29-r1)
(9/51) Installing pkgconf (1.0.2-r0)
(10/51) Installing patch (2.7.5-r1)
(11/51) Installing libssh2 (1.7.0-r2)
(12/51) Installing libcurl (7.52.1-r3)
(13/51) Installing curl (7.52.1-r3)
(14/51) Installing abuild (2.29.0-r2)
Executing abuild-2.29.0-r2.pre-install
(15/51) Installing binutils-libs (2.27-r1)
(16/51) Installing binutils (2.27-r1)
(17/51) Installing gmp (6.1.1-r0)
(18/51) Installing isl (0.17.1-r0)
(19/51) Installing libgomp (6.2.1-r1)
(20/51) Installing libatomic (6.2.1-r1)
(21/51) Installing mpfr3 (3.1.5-r0)
(22/51) Installing mpc1 (1.0.3-r0)
(23/51) Installing gcc (6.2.1-r1)
(24/51) Installing make (4.2.1-r0)
(25/51) Installing musl-dev (1.1.15-r6)
(26/51) Installing libc-dev (0.7-r1)
(27/51) Installing fortify-headers (0.8-r0)
(28/51) Installing g++ (6.2.1-r1)
(29/51) Installing build-base (0.4-r1)
(30/51) Installing expat (2.2.0-r0)
(31/51) Installing pcre (8.39-r0)
(32/51) Installing git (2.11.2-r0)
(33/51) Installing xz-libs (5.2.2-r1)
(34/51) Installing lzo (2.09-r1)
(35/51) Installing squashfs-tools (4.3-r3)
(36/51) Installing libburn (1.4.6-r0)
(37/51) Installing libedit (20150325.3.1-r3)
(38/51) Installing libacl (2.2.52-r2)
(39/51) Installing libisofs (1.4.6-r0)
(40/51) Installing libisoburn (1.4.6-r0)
(41/51) Installing xorriso (1.4.6-r0)
(42/51) Installing acct (6.6.2-r0)
(43/51) Installing lddtree (1.25-r2)
(44/51) Installing libuuid (2.28.2-r1)
(45/51) Installing libblkid (2.28.2-r1)
(46/51) Installing device-mapper-libs (2.02.168-r3)
(47/51) Installing cryptsetup-libs (1.7.2-r1)
(48/51) Installing kmod (23-r1)
(49/51) Installing mkinitfs (3.0.9-r1)
via
RUN apk add --update alpine-sdk
from my Dockerfile.
My mkmf.log file looks:
" -o conftest -I/include/universal-java1.8 -I/opt/jruby/lib/ruby/include/ruby/backward -I/opt/jruby/lib/ruby/include -I. -fPIC -fno-omit-frame-pointer -fno-strict-aliasing -fexceptions conftest.c -L. -L/opt/jruby/lib -m64 "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <ruby.h>
4: int main(int argc, char **argv)
5: {
6: return 0;
7: }
/* end */
which looks strange to me because I would expect starting this line with "gcc -o ...". And gcc is installed.
Any advise?
Please sign in to leave a comment.
Hello Thomas,
in case you're using jruby debug gems are ruby-debug-ide and ruby-debug-base so please check how it goes with them.
Hello Olga,
thank you. I'm now close to debugging ;-) I think.
I followed your advise and the build failure disappeared.
My Gemfile looks now like:
My first problem was that I still got a error at runtime when I started the rails application complaining that rdebug-ide needs some other gems not installed.
So I expanded my Gemfile until the rails-app started successful in the container.
The lines before
In my Dockerfile I had before debugging:
CMD puma -e $RAILS_ENV
Now with debugging I do:
CMD bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- /usr/local/bundle/gems/puma-3.8.2-java/bin/puma -e $RAILS_ENV
This are the first two lines from the docker-railscontainer-logfile:
eb_1 | /usr/local/bundle/gems/ruby-debug-base-0.10.6-java/lib/ruby-debug-base.rb:196: warning: tracing (e.g. set_trace_func) will not capture all events without --debug flag
web_1 | Fast Debugger (ruby-debug-ide 0.6.0, ruby-debug-base 0.10.6, file filtering is supported) listens on 0.0.0.0:1234
Hello Thomas,
sorry for the delay. There are some parameters that need to be passed to jruby. That probably might be done via JRUBY_OPTS (https://stackoverflow.com/questions/8283300/how-do-i-use-jruby-opts-with-rvm). You need to pass the following:
-J-Djruby.objectspace.enabled=true -J-Djruby.compile.mode=OFF -J-Djruby.debug.fullTrace=true