J'ai une application de base Rails exécutée dans Docker. Je peux la démarrer très bien et fournir des réponses. Je peux exécuter rake -T
ça va. Mais je ne peux pas exécuter une commande Rails generate. Elle ne me dit pas Could not find rake-12.3.1 in any of the sources
$ docker-compose run main bundle exec Rails generate controller Welcome index
Starting cognitopoc_db_1 ... done
Could not find rake-12.3.1 in any of the sources
Run `bundle install` to install missing gems.
Voici mon bund env:
$ docker-compose run main bundle env
Starting cognitopoc_db_1 ... done
## Environment
Bundler 1.16.1
Platforms Ruby, x86_64-linux
Ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Full Path /usr/local/bin/Ruby
Config Dir /usr/local/etc
RubyGems 2.7.6
Gem Home /usr/local/bundle
Gem Path /root/.gem/Ruby/2.5.0:/usr/local/lib/Ruby/gems/2.5.0:/usr/local/bundle
User Path /root/.gem/Ruby/2.5.0
Bin Dir /usr/local/bundle/bin
Tools
Git 2.11.0
RVM not installed
rbenv not installed
chruby not installed
## Bundler Build Metadata
Built At 2017-12-21
Git SHA 0034ef341
Released Version true
## Bundler settings
path
Set for your local app (/usr/local/bundle/config): "vendor/cache"
Set via BUNDLE_PATH: "/usr/local/bundle"
jobs
Set for your local app (/usr/local/bundle/config): "4"
bin
Set via BUNDLE_BIN: "/usr/local/bundle/bin"
silence_root_warning
Set via BUNDLE_SILENCE_ROOT_WARNING: true
app_config
Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
gemfile
Set via BUNDLE_GEMFILE: "/myapp/Gemfile"
## Gemfile
### Gemfile
Ruby
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 'coffee-Rails', '~> 4.2'
gem 'jbuilder', '~> 2.5'
gem 'pg', '>= 0.18', '< 2.0'
gem 'puma', '~> 3.7'
gem 'Rails', '~> 5.1.6'
gem 'sass-Rails', '~> 5.0'
gem 'turbolinks', '~> 5'
gem 'uglifier', '>= 1.3.0'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
group :development, :test do
gem 'byebug', platforms: %i[mri mingw x64_mingw]
gem 'capybara', '~> 2.13'
gem 'Selenium-webdriver'
end
group :development do
gem 'listen', '>= 3.0.5', '< 3.2'
# 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
### Gemfile.lock
GEM
remote: https://rubygems.org/
specs:
actioncable (5.1.6)
actionpack (= 5.1.6)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
mail (~> 2.5, >= 2.5.4)
Rails-dom-testing (~> 2.0)
actionpack (5.1.6)
actionview (= 5.1.6)
activesupport (= 5.1.6)
rack (~> 2.0)
rack-test (>= 0.6.3)
Rails-dom-testing (~> 2.0)
Rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.6)
activesupport (= 5.1.6)
builder (~> 3.1)
erubi (~> 1.4)
Rails-dom-testing (~> 2.0)
Rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.1.6)
activesupport (= 5.1.6)
globalid (>= 0.3.6)
activemodel (5.1.6)
activesupport (= 5.1.6)
activerecord (5.1.6)
activemodel (= 5.1.6)
activesupport (= 5.1.6)
arel (~> 8.0)
activesupport (5.1.6)
concurrent-Ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
arel (8.0.0)
builder (3.2.3)
byebug (10.0.2)
capybara (2.18.0)
addressable
mini_mime (>= 0.1.3)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (>= 2.0, < 4.0)
childprocess (0.9.0)
ffi (~> 1.0, >= 1.0.11)
coffee-Rails (4.2.2)
coffee-script (>= 2.2.0)
railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
concurrent-Ruby (1.0.5)
crass (1.0.3)
erubi (1.7.1)
execjs (2.7.0)
ffi (1.9.23)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (1.0.0)
concurrent-Ruby (~> 1.0)
jbuilder (2.7.0)
activesupport (>= 4.2.0)
multi_json (>= 1.2)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
Ruby_dep (~> 1.2)
loofah (2.2.2)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.0)
mini_mime (>= 0.1.1)
method_source (0.9.0)
mini_mime (1.0.0)
mini_portile2 (2.3.0)
minitest (5.11.3)
multi_json (1.13.1)
nio4r (2.3.0)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
pg (1.0.0)
public_suffix (3.0.2)
puma (3.11.3)
rack (2.0.4)
rack-test (1.0.0)
rack (>= 1.0, < 3)
Rails (5.1.6)
actioncable (= 5.1.6)
actionmailer (= 5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
activemodel (= 5.1.6)
activerecord (= 5.1.6)
activesupport (= 5.1.6)
bundler (>= 1.3.0)
railties (= 5.1.6)
sprockets-Rails (>= 2.0.0)
Rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
Rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2)
railties (5.1.6)
actionpack (= 5.1.6)
activesupport (= 5.1.6)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (12.3.1)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
Ruby_dep (1.5.0)
rubyzip (1.2.1)
sass (3.5.6)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sass-Rails (5.0.7)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-Rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
Selenium-webdriver (3.11.0)
childprocess (~> 0.5)
rubyzip (~> 1.2)
spring (2.0.2)
activesupport (>= 4.2)
spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
sprockets (3.7.1)
concurrent-Ruby (~> 1.0)
rack (> 1, < 3)
sprockets-Rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (0.20.0)
thread_safe (0.3.6)
tilt (2.0.8)
turbolinks (5.1.0)
turbolinks-source (~> 5.1)
turbolinks-source (5.1.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
uglifier (4.1.8)
execjs (>= 0.3.0, < 3)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)
xpath (3.0.0)
nokogiri (~> 1.8)
PLATFORMS
Ruby
DEPENDENCIES
byebug
capybara (~> 2.13)
coffee-Rails (~> 4.2)
jbuilder (~> 2.5)
listen (>= 3.0.5, < 3.2)
pg (>= 0.18, < 2.0)
puma (~> 3.7)
Rails (~> 5.1.6)
sass-Rails (~> 5.0)
Selenium-webdriver
spring
spring-watcher-listen (~> 2.0.0)
turbolinks (~> 5)
uglifier (>= 1.3.0)
BUNDLED WITH
1.16.1
et voici mon 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 'coffee-Rails', '~> 4.2'
gem 'jbuilder', '~> 2.5'
gem 'pg', '>= 0.18', '< 2.0'
gem 'puma', '~> 3.7'
gem 'Rails', '~> 5.1.6'
gem 'sass-Rails', '~> 5.0'
gem 'turbolinks', '~> 5'
gem 'uglifier', '>= 1.3.0'
group :development, :test do
gem 'byebug', platforms: %i[mri mingw x64_mingw]
gem 'capybara', '~> 2.13'
gem 'Selenium-webdriver'
end
group :development do
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
Voici le Dockerfile:
FROM Ruby:2.5
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
&& apt-get install -y \
apt-utils \
build-essential \
nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile* /myapp/
RUN bundle install --path vendor/cache --jobs=4
COPY . /myapp
CMD bundle exec Rails s -p 3000 -b '0.0.0.0'
et voici le fichier de composition:
version: '3'
services:
db:
image: postgres
volumes:
- ./pg_data:/var/lib/postgresql/data
main:
build: .
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
alors pourquoi pourrais-je exécuter rake -T
bunt pas Rails generate
?
J'ai commencé à obtenir cette erreur lorsque j'ai mis à niveau les conteneurs de pipeline Bitbucket pour utiliser le conteneur Ruby 2.5.1. Bien qu'il ne puisse pas répondre au cas d'utilisation de tout le monde, j'ai pu obtenir mon Rails (rake) commandes pour fonctionner en ajoutant ceci à mon bitbucket-pipelines.yml:
bundle install --binstubs
Il est intéressant de noter que quelques personnes ont commencé à obtenir cette même erreur à propos de la même version de Rake à peu près au même moment lors du regroupement dans Docker-compose. Je ne peux pas dire ce qui a causé cela, mais j'ai trouvé une solution qui fonctionne pour moi.
Vous pouvez essayer d'exécuter les commandes suivantes pour supprimer votre Gemfile.lock
et .bundle
répertoire et regroupement. J'ai eu cette idée dans cet article de blog: https://makandracards.com/makandra/1667-how-to-fix-gems-are-unavailable-al Bien-they-are-installed
$ docker-compose exec main bash
$ rm -rf .bundle/
$ rm Gemfile.lock
$ bundle install
$ Rails c # => This now works
Définir probablement BUNDLE_APP_CONFIG
dans docker-compose.yml comme ci-dessous résout le problème.
environment:
BUNDLE_APP_CONFIG: /myapp/.bundle
Après avoir suivi, exécutez bundle install
encore.