Skip to content

Instantly share code, notes, and snippets.

@koshigoe
Created December 28, 2017 12:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koshigoe/a200c8c10a453604f85b653e19acd947 to your computer and use it in GitHub Desktop.
Save koshigoe/a200c8c10a453604f85b653e19acd947 to your computer and use it in GitHub Desktop.
stack level too deep
FROM alpine:3.7
# skip installing gem documentation
RUN mkdir -p /usr/local/etc \
&& { \
echo 'install: --no-document'; \
echo 'update: --no-document'; \
} >> /usr/local/etc/gemrc
ENV RUBY_MAJOR 2.5
ENV RUBY_VERSION 2.5.0
ENV RUBY_DOWNLOAD_SHA256 1da0afed833a0dab94075221a615c14487b05d0c407f991c8080d576d985b49b
ENV RUBYGEMS_VERSION 2.7.4
ENV BUNDLER_VERSION 1.16.1
# some of ruby's build scripts are written in ruby
# we purge system ruby later to make sure our final image uses what we just built
# readline-dev vs libedit-dev: https://bugs.ruby-lang.org/issues/11869 and https://github.com/docker-library/ruby/issues/75
RUN set -ex \
\
&& apk add --no-cache --virtual .ruby-builddeps \
autoconf \
bison \
bzip2 \
bzip2-dev \
ca-certificates \
coreutils \
dpkg-dev dpkg \
gcc \
gdbm-dev \
glib-dev \
libc-dev \
libffi-dev \
libressl \
libressl-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
ncurses-dev \
procps \
readline-dev \
ruby \
tar \
xz \
yaml-dev \
zlib-dev \
git \
\
&& git clone https://github.com/ruby/ruby.git \
&& cd ruby \
\
# hack in "ENABLE_PATH_CHECK" disabling to suppress:
# warning: Insecure world writable dir
&& { \
echo '#define ENABLE_PATH_CHECK 0'; \
echo; \
cat file.c; \
} > file.c.new \
&& mv file.c.new file.c \
\
&& autoconf \
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
# the configure script does not detect isnan/isinf as macros
&& export ac_cv_func_isnan=yes ac_cv_func_isinf=yes \
&& ./configure \
--build="$gnuArch" \
--disable-install-doc \
--enable-shared \
&& make -j "$(nproc)" \
&& make install \
\
&& runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)" \
&& apk add --virtual .ruby-rundeps $runDeps \
bzip2 \
ca-certificates \
libffi-dev \
libressl-dev \
procps \
yaml-dev \
zlib-dev \
&& apk del .ruby-builddeps \
&& cd / \
&& gem update --system "$RUBYGEMS_VERSION" \
&& gem install bundler --version "$BUNDLER_VERSION" --force
# install things globally, for great justice
# and don't create ".bundle" in all our apps
ENV GEM_HOME /usr/local/bundle
ENV BUNDLE_PATH="$GEM_HOME" \
BUNDLE_BIN="$GEM_HOME/bin" \
BUNDLE_SILENCE_ROOT_WARNING=1 \
BUNDLE_APP_CONFIG="$GEM_HOME"
ENV PATH $BUNDLE_BIN:$PATH
RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \
&& chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
CMD [ "irb" ]
require 'rails_helper'
RSpec.describe MyClass do
describe '#my_method' do
subject { MyClass.new.my_method(arg) }
context 'when ...' do
context 'when ...' do
context 'when ...' do
context 'when ...' do
let(:arg) { create(:arg, :trait, attr: x) }
it 'should be ...' do
YourClass.new(
x: X.x(
y: Y.y(
z: Z.z(
a: A.a(
b: B.b
)
)
)
)
)
end
end
end
end
end
end
end
[docker-for-mac]% docker build -t ruby:trunk-alpine3.7 -f Dockerfile .
[docker-for-mac]% docker container run --rm -it ruby:trunk-alpine3.7 sh
/# gem install rubocop
/ # rubocop sample.rb
Inspecting 1 file
0 files inspected, no offenses detected
Traceback (most recent call last):
142: from /usr/local/bundle/bin/rubocop:23:in `<main>'
141: from /usr/local/bundle/bin/rubocop:23:in `load'
140: from /usr/local/bundle/gems/rubocop-0.52.1/bin/rubocop:12:in `<top (required)>'
139: from /usr/local/lib/ruby/2.6.0/benchmark.rb:308:in `realtime'
138: from /usr/local/bundle/gems/rubocop-0.52.1/bin/rubocop:13:in `block in <top (required)>'
137: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/cli.rb:38:in `run'
136: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/cli.rb:78:in `execute_runners'
135: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/cli.rb:150:in `execute_runner'
... 130 levels...
4: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/ast/node.rb:172:in `each'
3: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/ast/node.rb:174:in `block in each_child_node'
2: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/ast/node.rb:87:in `complete!'
1: from /usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/ast/node.rb:172:in `each_child_node'
/usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/ast/node.rb:172:in `each': stack level too deep (SystemStackError)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment