Tag: ruby在轨道

使用Ubuntu容器在docker(Python,Java,Ruby,…)中运行应用程序时的编码问题(ascii,utf-8)

在我自己的PC上,应用程序运行良好,但是当它被部署到docker中时,由于字符无效而失败。 我使用的是ubuntu:lastest容器和python3 , java和ruby 。

更新gem时,Docker bundle安装caching问题

我在开发和生产中都使用docker,而一件真正让我感到困惑的事情是docker cache的简单性。 我有ruby应用程序需要bundle install来安装依赖关系,所以我从下面的Dockerfile开始: ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install –path /root/bundle所有依赖项都被caching,直到我添加一个新的gem。 即使我已经添加的gem只是0.5 MB,它仍然需要10-15分钟从头开始安装所有的应用程序的gem。 然后再用10分钟来部署它,由于依赖关系文件夹的大小(约300MB)。 我遇到了与node_modules和npm完全相同的问题。 我想知道,有没有人find解决这个问题? 我的研究成果迄今为止: 源到图像 – 在增量构build中caching任意文件。 不幸的是,由于它的工作方式,即使没有改变gem,它也需要将整个300MB推送到registry中。 生成速度更快 – 即使在没有更新的情况下,也能更快地部署。 Gemfile.tip – 将Gemfile分割为两个不同的文件,只将gem添加到其中的一个。 非常具体的解决scheme捆绑,我不相信它会超越增加1-2gem的规模。 鱼叉 – 如果不是强迫抛弃Dockerfile并切换到它们自己的格式,这将是一个很好的select。 这意味着团队中的所有新开发者都会感到特别痛苦,因为这个工具集需要时间与Docker分开学习。 暂时打包caching。 这只是一个我不确定的想法。 以某种方式将包pipe理器caching(而不是依赖关系文件夹)带到机器上,然后再删除它。 基于我的破解,它显着加快了package和npm的安装,而不会让机器在不必要的caching文件中膨胀。

Docker:当我需要添加软件时,是否需要重新构build容器?

所以我正在试验Docker,我build立了一个Rails应用程序与postgres交谈。 一切正常,我可以访问应用程序,迁移数据库等 Dockerfile FROM ruby:2.2.1 RUN apt-get update -qq && apt-get install -y build-essential RUN apt-get install -y libxml2-dev libxslt1-dev RUN apt-get install -y libqt4-webkit libqt4-dev xvfb RUN apt-get install -y nodejs ENV APP_HOME /code RUN mkdir $APP_HOME WORKDIR $APP_HOME ADD . $APP_HOME RUN bundle install docker-compose.yml web: build: . command: bin/rails server –port 3000 […]

在Docker中使用Spring保存文件后“const_get':未初始化的常量(NameError)'

我在Spring和Guard中使用Docker中的rails。 请参阅Guardfile: guard 'rspec', cmd: "#{env_vars} spring rspec -color -f doc", :all_on_start => false, :all_after_pass => false do watch(%r{^spec/.+_spec\.rb$}) 奇怪的问题:当上面的命令中有spring标签时,我在运行规范时遇到了一个错误,但只是在以某种方式保存了容器中的一个文件之后。 这是错误的: /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `const_get': uninitialized constant User (NameError) from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `block in constantize' from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `each' from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `inject' from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `constantize' from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:583:in `get' from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:614:in `constantize' from /usr/local/bundle/gems/devise-4.2.0/lib/devise.rb:301:in `get' from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:81:in `to' from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:76:in […]

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 […]

我如何使用公共的大摇大摆的docker图像来生成客户端?

我们有一个完全dockerized的Web应用程序,其API有效的Swagger定义。 API运行在它自己的docker容器中,我们使用docker-compose编排一切。 我想生成一个基于位于http://api:8443/apidocs.json的Swagger定义的Ruby客户端。 我已经通过这里的文档,这导致我Swagger的公共docker图像生成客户端和服务器代码。 遗憾的是文档是缺乏的,并没有提供实际生成一个客户端与docker图像的例子。 Dockerfile指示它的容器运行一个Web服务,我只能假定是http://generator.swagger.io的dockerized版本。 因此,我希望能够使用以下命令生成客户端: curl -X POST -H "content-type:application/json" -d \ '{"swaggerUrl":"http://api:8443/apidocs"}' \ http://swagger-generator:8080/api/gen/clients/ruby 这里没有运气。 即使我已经确认swagger的定义是有效的(npm -q install -g swagger-tools >/dev/null) && swagger-tools validate http://api:8443/apidocs 。 有任何想法吗?

添加除Dockerfile之外的项目文件夹

我正在尝试在Docker容器中运行一个小的Rails应用程序。 我越来越接近,但我正在努力与我的Dockerfile。 我已经添加了以下命令到我的Dockerfilerecursion添加我的项目文件夹中的所有文件。 ADD . 之后,我跑了 RUN bundle install –deployment 但是,因为我的ADD命令还添加了Dockerfile,这意味着我的图像caching每次编辑Dockerfile时都会中断,迫使我重新绑定。 根据https://docs.docker.com/reference/builder/#the-dockerignore-file ,我可以使用.dockerignore文件来忽略Dockerfile,但是这会导致docker docker build命令失败 2014/09/17 22:12:46 Dockerfile was excluded by .dockerignore pattern 'Dockerfile' 我如何轻松地将我的项目添加到我的图像,但排除Dockerfile,所以我不打破docker图像caching?

onbuild目录是如何工作的官方的Rails泊坞窗图像?

我一直在为我们的团队构build一个Docker镜像 ,该镜像使用的Ruby on Rails版本太旧,以至于官方Docker镜像不支持。 在反向移植官方Rails镜像的过程中,我正在查看用于构build正式映像的存储库中的Dockerfile ,我不明白它们是如何组合在一起的。 具体来说,如何调用onbuild目录中的Dockerfile? 在根目录的Dockerfile中没有明确的调用。 我已经阅读了ONBUILD的文档,找不到答案。

Docker-compose服务以–service-ports标志为默认值

tl; dr:有没有办法在编写文件中指定–service-ports标志作为默认值? 通过我的rails应用程序,我通常有一个这样的command:在我的web服务中: command: bash -c "rake db:create && rake db:migrate && rake db:seed && RAILS_ENV=development puma" 所以,用docker-compose起来,我都设置好了,但是如果我想用docker-compose run –service-ports web puma进行debugging,我必须停止我的web服务并docker-compose run –service-ports web puma 对于我的开发组合文件,我希望Web服务可以使用–service-ports标志作为默认运行。 无论如何要在撰写文件中指定这个,这样我就可以在一个命令中准备好一切了吗? (docker – 组成)

docker-compose rails with mysql

你好,我有很大的问题。 我试图在单独的docker集装箱上运行rails和mysql。 在docker-compose.yml中我有: version: '2' services: db: image: mysql ports: – "3307:3306" environment: MYSQL_ROOT_PASSWORD: zzz MYSQL_USER: root MYSQL_PASSWORD: zzz MYSQL_DATABASE: zzz web: build: . command: bundle exec rails s -p 3000 volumes: – .:/app ports: – "3000:3000" depends_on: – db 并在我的轨道database.yml development: adapter: mysql2 encoding: utf8 database: zzz pool: 5 username: root password: zzz host: […]