Rails和Docker - 无法安装json宝石

6

我尝试在docker上使用panamax-ui(一个RoR应用程序)。

我花了几天时间进行了修改并在本地和docker上工作,成功地添加了一些新功能和一些gems。

然后我运行了bundle install

接着我想重新构建我的docker(docker build),但是我遇到了这个错误:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb creating Makefile

make "DESTDIR=" clean sh: make: not found

make "DESTDIR=" sh: make: not found

make failed, exit code 127

Gem files will remain installed in /usr/lib/ruby/gems/2.1.0/gems/json-1.8.3 for inspection. Results logged to /usr/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/json-1.8.3/gem_make.out An error occurred while installing json (1.8.3), and Bundler cannot continue. Make sure that gem install json -v '1.8.3' succeeds before bundling. The command '/bin/sh -c bundle install --without development test' returned a non-zero code: 5

我试图删除Gemfile.lock并重新运行bundle install,然后重新构建docker,但是仍然出现相同的错误...

这是我的Gemfile

source 'https://rubygems.org'

gem 'rails', '4.1.7'
gem 'puma', '2.8.2'
gem 'sqlite3', '1.3.9'
gem 'faraday_middleware', '0.9.0'
gem 'docker-api', '1.13.0', require: 'docker'
gem 'fleet-api', '1.1.0', require: 'fleet'
gem 'active_model_serializers', '0.9.0'
gem 'octokit', '3.2.0'
gem 'kmts', '2.0.1'
gem 'devise'
gem "devise_ldap_authenticatable"
gem 'json', '1.8.3'


group :test, :development do
  gem 'rspec-rails'
  gem 'its'
end

group :test do
  gem 'coveralls', '0.7.0'
  gem 'shoulda-matchers', '2.6.1'
  gem 'database_cleaner', '1.3.0'
  gem 'webmock', '1.20.0'
end

还有我的Gemfile.lock

    GEM
  remote: https://rubygems.org/
  specs:
    actionmailer (4.1.7)
      actionpack (= 4.1.7)
      actionview (= 4.1.7)
      mail (~> 2.5, >= 2.5.4)
    actionpack (4.1.7)
      actionview (= 4.1.7)
      activesupport (= 4.1.7)
      rack (~> 1.5.2)
      rack-test (~> 0.6.2)
    actionview (4.1.7)
      activesupport (= 4.1.7)
      builder (~> 3.1)
      erubis (~> 2.7.0)
    active_model_serializers (0.9.0)
      activemodel (>= 3.2)
    activemodel (4.1.7)
      activesupport (= 4.1.7)
      builder (~> 3.1)
    activerecord (4.1.7)
      activemodel (= 4.1.7)
      activesupport (= 4.1.7)
      arel (~> 5.0.0)
    activesupport (4.1.7)
      i18n (~> 0.6, >= 0.6.9)
      json (~> 1.7, >= 1.7.7)
      minitest (~> 5.1)
      thread_safe (~> 0.1)
      tzinfo (~> 1.1)
    addressable (2.3.8)
    archive-tar-minitar (0.5.2)
    arel (5.0.1.20140414130214)
    bcrypt (3.1.11)
    builder (3.2.2)
    concurrent-ruby (1.0.2)
    coveralls (0.7.0)
      multi_json (~> 1.3)
      rest-client
      simplecov (>= 0.7)
      term-ansicolor
      thor
    crack (0.4.3)
      safe_yaml (~> 1.0.0)
    database_cleaner (1.3.0)
    devise (4.2.0)
      bcrypt (~> 3.0)
      orm_adapter (~> 0.1)
      railties (>= 4.1.0, < 5.1)
      responders
      warden (~> 1.2.3)
    devise_ldap_authenticatable (0.8.5)
      devise (>= 3.4.1)
      net-ldap (>= 0.6.0, <= 0.11)
    diff-lcs (1.2.5)
    docile (1.1.5)
    docker-api (1.13.0)
      archive-tar-minitar
      excon (>= 0.37.0)
      json
    domain_name (0.5.20160615)
      unf (>= 0.0.5, < 1.0.0)
    erubis (2.7.0)
    excon (0.50.1)
    faraday (0.8.11)
      multipart-post (~> 1.2.0)
    faraday_middleware (0.9.0)
      faraday (>= 0.7.4, < 0.9)
    fleet-api (1.1.0)
      excon (>= 0.27.4)
    http-cookie (1.0.2)
      domain_name (~> 0.5)
    i18n (0.7.0)
    its (0.2.0)
      rspec-core
    json (1.8.3)
    kmts (2.0.1)
    mail (2.6.4)
      mime-types (>= 1.16, < 4)
    mime-types (3.1)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2016.0521)
    minitest (5.9.0)
    multi_json (1.12.1)
    multipart-post (1.2.0)
    net-ldap (0.11)
    netrc (0.11.0)
    octokit (3.2.0)
      sawyer (~> 0.5.3)
    orm_adapter (0.5.0)
    puma (2.8.2)
      rack (>= 1.1, < 2.0)
    rack (1.5.5)
    rack-test (0.6.3)
      rack (>= 1.0)
    rails (4.1.7)
      actionmailer (= 4.1.7)
      actionpack (= 4.1.7)
      actionview (= 4.1.7)
      activemodel (= 4.1.7)
      activerecord (= 4.1.7)
      activesupport (= 4.1.7)
      bundler (>= 1.3.0, < 2.0)
      railties (= 4.1.7)
      sprockets-rails (~> 2.0)
    railties (4.1.7)
      actionpack (= 4.1.7)
      activesupport (= 4.1.7)
      rake (>= 0.8.7)
      thor (>= 0.18.1, < 2.0)
    rake (11.2.2)
    responders (1.1.2)
      railties (>= 3.2, < 4.2)
    rest-client (2.0.0)
      http-cookie (>= 1.0.2, < 2.0)
      mime-types (>= 1.16, < 4.0)
      netrc (~> 0.8)
    rspec-core (3.5.1)
      rspec-support (~> 3.5.0)
    rspec-expectations (3.5.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.5.0)
    rspec-mocks (3.5.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.5.0)
    rspec-rails (3.5.0)
      actionpack (>= 3.0)
      activesupport (>= 3.0)
      railties (>= 3.0)
      rspec-core (~> 3.5.0)
      rspec-expectations (~> 3.5.0)
      rspec-mocks (~> 3.5.0)
      rspec-support (~> 3.5.0)
    rspec-support (3.5.0)
    safe_yaml (1.0.4)
    sawyer (0.5.5)
      addressable (~> 2.3.5)
      faraday (~> 0.8, < 0.10)
    shoulda-matchers (2.6.1)
      activesupport (>= 3.0.0)
    simplecov (0.12.0)
      docile (~> 1.1.0)
      json (>= 1.8, < 3)
      simplecov-html (~> 0.10.0)
    simplecov-html (0.10.0)
    sprockets (3.6.3)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (2.3.3)
      actionpack (>= 3.0)
      activesupport (>= 3.0)
      sprockets (>= 2.8, < 4.0)
    sqlite3 (1.3.9)
    term-ansicolor (1.3.2)
      tins (~> 1.0)
    thor (0.19.1)
    thread_safe (0.3.5)
    tins (1.10.2)
    tzinfo (1.2.2)
      thread_safe (~> 0.1)
    unf (0.1.4)
      unf_ext
    unf_ext (0.0.7.2)
    warden (1.2.6)
      rack (>= 1.0)
    webmock (1.20.0)
      addressable (>= 2.3.6)
      crack (>= 0.3.2)

PLATFORMS
  ruby

DEPENDENCIES
  active_model_serializers (= 0.9.0)
  coveralls (= 0.7.0)
  database_cleaner (= 1.3.0)
  devise
  devise_ldap_authenticatable
  docker-api (= 1.13.0)
  faraday_middleware (= 0.9.0)
  fleet-api (= 1.1.0)
  its
  json (= 1.8.3)
  kmts (= 2.0.1)
  octokit (= 3.2.0)
  puma (= 2.8.2)
  rails (= 4.1.7)
  rspec-rails
  shoulda-matchers (= 2.6.1)
  sqlite3 (= 1.3.9)
  webmock (= 1.20.0)

BUNDLED WITH
   1.12.5

注意:当我执行docker build时出现问题。

谢谢你的帮助。


可能只是“make:未找到”这么简单吗?如果您使用容器运行shell,那么make是否存在? - user2105103
如果容器无法创建,我该如何在其中运行一个 shell? - F4Ke
2个回答

7

和任何Ruby安装一样,你需要开发工具来安装具有本地扩展的gem:

RUN apk update \
 && apk add --no-cache  \
    build-base  \
    ruby-dev

2

panamax-ui 使用 Alpine Linux 基础镜像,因此您可以尝试在 Dockerfile 中添加 ruby-json apk 包以正确安装 json gem:

FROM centurylink/panamax-ruby-base:0.4.0

RUN apk-install ruby-json

CMD bundle exec rails s

出现问题的地方在FROM行。 - F4Ke
干得好,先生!您可以编辑您的答案并通知我,我会将其标记为成功 :) - F4Ke
这对我来说是正确的解决方案。 Alpine Linux是一种最小化的映像,并且许多在其他发行版上被视为理所当然的库在Alpine中默认情况下不存在。 ruby-json软件包使得json gem可以在Alpine Linux 3.5上编译其本机扩展。 - anothermh
警告 对于像alpine 3.9这样的版本,正确的RUN命令是RUN apk add ruby-json。顺便说一下:在某些情况下,您可能需要更多的本地库。您可以在此处找到有用的信息 - https://github.com/gliderlabs/docker-alpine/issues/53#issuecomment-179486583 - Евгений Масленков

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接