No estoy seguro de si el problema es específico de concurrent-ruby o no, pero require no funciona como se esperaba. No sé cómo depurar esto. Funciona cuando se ejecuta como un usuario normal fuera de Docker en Ubuntu. Desafortunadamente, no es posible establecer un proceso dentro de Docker para ver dónde diverge. ¿Algunas ideas?

Actualización: parece que el problema está relacionado con la opción --path ./vendor/bundle; funciona sin ella, no funciona con ella.

FROM alpine:3.10.2
RUN apk add bash
SHELL ["/bin/bash", "-c"]
RUN apk add npm ruby-bundler
RUN mkdir /app
WORKDIR /app
RUN echo -e "source 'https://rubygems.org'\n\
gem 'concurrent-ruby', require: 'concurrent'\n" >> ./Gemfile
RUN bundle install --path ./vendor/bundle
RUN ruby -e 'require("concurrent")'

Salidas:

Step 9/9 : RUN ruby -e 'require("concurrent")'
 ---> Running in efbb0ed5794f
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- concurrent (LoadError)
    from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    from -e:1:in `<main>'
The command '/bin/bash -c ruby -e 'require("concurrent")'' returned a non-zero code: 1
-1
Hypertable 5 oct. 2019 a las 08:04

1 respuesta

La mejor respuesta

Encontrado el problema, es necesario usar bundle exec para iniciar la aplicación ruby ​​que hará la operación require.

0
Hypertable 5 oct. 2019 a las 15:38