Docker&Rails | bundler:找不到命令:rails

我是Docker的新手,对于Rails来说是相当新的。

当我运行docker-compose up ,我得到这个错误:

 web_1 | bundler: command not found: rails web_1 | Install missing gem executables with `bundle install` app_web_1 exited with code 127 

最初我在运行bundle install时遇到了麻烦,无法find任何gem。 我在Gemfile中得到了“ 找不到任何来源的gem ”的错误。 然后我试图运行bundle (没有install ),它没有返回任何错误。

Rails是绝对安装的,因为inputrails给我所有的使用选项。

此外,我可以看到vendor/cache的gem。 我尝试删除所有这些,并运行bundle install ,他们都开始出现一个一个,因为捆绑商安装它们。

编辑:请随时纠正我的理解:因为运行捆绑软件安装意味着在Docker实例上安装gem,它不是“本地”安装。 在尝试解决此问题时,我在本地删除了所有gem,并重新安装了捆绑软件。 所以,当我运行gems list ,我只看到捆绑器。 我跑了bundler install ,它声称所有的gem正在安装​​。 他们在哪里安装? 它说,这将是供应商/caching,这是真的。 我可以在那里看到它们,但它仍然没有find任何gem:它甚至不会find轨道。

编辑2:我还应该提到: bin/rails s启动服务器就好了。 由于数据库实例没有运行,它不会加载任何东西,但这是有道理的,我猜。

编辑3:我在本地运行gem install rails ,仍然没有改变,但是现在gems list返回rails和它的依赖关系。

以下是一些可能在下面相关的文件和日志,可以帮助确定原因。 请注意我将实际的应用程序名称更改为应用app

运行gems list返回这个:

 *** LOCAL GEMS *** actionmailer (5.1.1) actionpack (5.1.1) actionview (5.1.1) activejob (5.1.1) activemodel (5.1.1) activerecord (5.1.1) activesupport (5.1.1) arel (8.0.0) builder (3.2.3) bundler (1.15.0) concurrent-ruby (1.0.5) erubi (1.6.0) globalid (0.4.0) i18n (0.8.1) loofah (2.0.3) mail (2.6.5) method_source (0.8.2) mime-types (3.1) mime-types-data (3.2016.0521) mini_portile2 (2.1.0) minitest (5.10.2) nio4r (2.0.0) nokogiri (1.7.2) rack (2.0.3) rack-test (0.6.3) rails (5.1.1) rails-dom-testing (2.0.3) rails-html-sanitizer (1.0.3) railties (5.1.1) rake (12.0.0) sprockets (3.7.1) sprockets-rails (3.2.0) thor (0.19.4) thread_safe (0.3.6) tzinfo (1.2.3) websocket-driver (0.6.5) websocket-extensions (0.1.2) 

我的Gemfile看起来像这样:

 source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end gem 'gmail' gem 'oauth', '0.5.2' gem 'twilio' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.0.1' # Use postgres as the database for Active Record gem 'pg' # Use Puma as the app server gem 'puma', '~> 3.0' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 3.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platform: :mri end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '~> 3.0.5' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 

docker-compose.yml文件如下所示:

 version: '2' services: db: image: postgres volumes: - ./postgres-data:/var/lib/postgresql/data web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - "3000:3000" depends_on: - db 

我的Dockerfile看起来像这样:

 FROM ruby:2.4.0 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /app WORKDIR /app ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock ADD . /app 

运行bundle install返回:

 Using rake 12.0.0 Using oauth 0.5.2 Using mime-types-data 3.2016.0521 Using builder 3.2.3 Using multi_xml 0.6.0 Using concurrent-ruby 1.0.5 Using i18n 0.8.1 Using minitest 5.10.2 Using thread_safe 0.3.6 Using erubis 2.7.0 Using mini_portile2 2.1.0 Using rack 2.0.3 Using nio4r 2.0.0 Using websocket-extensions 0.1.2 Using arel 7.1.4 Using method_source 0.8.2 Using thor 0.19.4 Using bundler 1.15.0 Using pg 0.20.0 Using puma 3.8.2 Using sass 3.4.24 Using tilt 2.0.7 Using execjs 2.7.0 Using coffee-script-source 1.12.2 Using turbolinks-source 5.0.3 Using multi_json 1.12.1 Using byebug 9.0.6 Using bindex 0.5.0 Using rb-fsevent 0.9.8 Using ffi 1.9.18 Using gmail_xoauth 0.4.2 Using mime-types 3.1 Using httparty 0.15.5 Using tzinfo 1.2.3 Using nokogiri 1.7.2 Using rack-test 0.6.3 Using sprockets 3.7.1 Using websocket-driver 0.6.5 Using uglifier 3.2.0 Using coffee-script 2.4.1 Using turbolinks 5.0.1 Using rb-inotify 0.9.8 Using mail 2.6.5 Using twilio 3.1.1 Using activesupport 5.0.3 Using loofah 2.0.3 Using listen 3.0.8 Using gmail 0.6.0 Using rails-dom-testing 2.0.3 Using globalid 0.4.0 Using activemodel 5.0.3 Using jbuilder 2.6.4 Using spring 2.0.1 Using rails-html-sanitizer 1.0.3 Using activejob 5.0.3 Using activerecord 5.0.3 Using spring-watcher-listen 2.0.1 Using actionview 5.0.3 Using actionpack 5.0.3 Using actioncable 5.0.3 Using actionmailer 5.0.3 Using railties 5.0.3 Using sprockets-rails 3.2.0 Using coffee-rails 4.2.1 Using jquery-rails 4.3.1 Using web-console 3.5.1 Using rails 5.0.3 Using sass-rails 5.0.6 Updating files in vendor/cache Bundle complete! 18 Gemfile dependencies, 68 gems now installed. Bundled gems are installed into ./vendor/cache. 

我不知道这是否是一个合适的解决scheme,但我尝试添加

 RUN bundler install 

到我的Dockerfile 。 我删除了所有的图像,运行docker-compose up和工作像一个魅力。