Tag: sinatra

如何从特定的git分支推送到AWS EC2服务容器(即“分段”)

我完全不熟悉AWS,EC2和服务容器,但是我确实已经设法成功地将我的sinatra应用程序与docker轻松地按照以下指南进行操作: http://blog.honeybadger.io/how-to-deploy-a-sinatra-app-in-docker-to-amazon-s-ec2-container-service/ 现在我有2个服务容器,一个用于生产,一个用于分段。 我原来的假设是,我可以从git staging分支推送到临时容器,并从我的本地机器从git生产分支到生产容器。 当我在暂存分支上进行更改并将映像推送到暂存容器时,暂存站点没有反映新的更改(我在浏览器中清除了caching)。 Q1:无论项目从哪个分支推送,EC2 SC是否自动接受主分支? Q2:用AWS实现分段和生产服务器的最简单方法是什么(可能不是SC,也许是豆秆?)。 注意:不要使用Heroku,因为签约我的公司需要在AWS上使用他们所有的系统。

我无法使用docker和乘客访问我的sinatra webapp url

我必须学习如何使用docker,以及如何dockerize一个sinatra webapp。 我按照这个教程: http : //coding.jandavid.de/2016/01/22/dockerizing-sinatra/ 我现在在本教程的最后一节,即运行我的应用程序的url如下: http : //192.168.99.100 : 4567/ ,但它不工作。 首先,我对本教程的部分内容有一些疑问。 在.conf文件中,他使用以下行passenger_ruby /usr/bin/ruby2.2; 因为我使用的Ruby 2.4.1版本,我写了这一行代码passenger_ruby /usr/bin/ruby2.4; 。 那就对了? 这条线是什么意思? 在Dockerfile中,他使用了下面一行FROM phusion/passenger-ruby22:0.9.18他写了一个特定的版本,我需要使用下面的这一行FROM phusion/passenger-ruby24因为我使用的是ruby 2.4.1,但是我不知道我是否需要指定一个版本。 当我构build图像,所有作品完美,当我开始我的应用程序docker run -p 4567:80 vcheloud/sinatra-example似乎工作正常。 但是,当我尝试运行http://192.168.99.100:4567/它不工作。

图错误exec:“bundle”:在$ PATH中找不到可执行文件

我试图运行没有数据库使用无花果的Dockerized Sinatra应用程序,但我不断收到此错误: $ fig up Recreating my_web_1… Cannot start container 93f4a091bd6387bd28d8afb8636d2b14623a08d259fba383e8771fee811061a3: exec: "bundle": executable file not found in $PATH 这是Dockerfile FROM ubuntu-nginx MAINTAINER Ben Bithacker ben@bithacker.org COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock WORKDIR /app RUN ["/bin/bash", "-l", "-c", "bundle install"] ADD config/container/start-server.sh /usr/bin/start-server RUN chmod +x /usr/bin/start-server ADD . /app EXPOSE 9292 CMD ["/usr/bin/start-server"] config […]

在Docker容器中访问Sinatra应用程序的问题

我有一个sinatra API服务器,我可以成功运行本地端口9292我想在一个容器中运行。 我用以下创build一个Dockerfile: FROM ruby:2.2.0 RUN apt-get update -qq && \ apt-get install -y build-essential libpq-dev nodejs –no-install-recommends && \ rm -rf /var/lib/apt/lists/* && \ mkdir /myapp WORKDIR /myapp ADD . /myapp RUN bundle install EXPOSE 9292 CMD bundle exec rackup config.ru 在构build映像后,我运行以下命令启动容器: docker run -it -p 9292:9292 –rm api-server 我确认该应用程序已启动并正在运行,并提供了其他详细信息: Listening on localhost:9292, CTRL+C […]

Docker构build无法在Sinatra项目中安装pg gem

我已经审查了所有的post与类似的错误安装Postgres的pggem。 我的问题是独特的:我可以通过Gemfile和bundle install成功地将Postgres添加到我的Sinatra Ruby项目中 – 但是在构buildDocker镜像时,安装pg失败,出现以下错误: ERROR: Error installing pg: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/pg-0.19.0/ext /usr/local/bin/ruby -r ./siteconf20170113-7-ottv1k.rb extconf.rb checking for pg_config… no No pg_config… trying anyway. If building fails, please try again with –with-pg-config=/path/to/pg_config checking for libpq-fe.h… no Can't find the 'libpq-fe.h header *** extconf.rb failed *** 我已经尝试了类似的答案build议一切: Brew安装/卸载, […]

docker化的Sinatra应用程序的源代码是否在容器中或挂载?

我已经研究了很多关于dockerizing Sinatra,Rails等的post,但是我不清楚应用程序的源代码应该放在哪里:在容器中,还是在单独的/外部的安装中,用于生产网站? 我认为单独装载的优点是,如果站点的代码经常更新,那么我可以假设只是从Git开始将代码导出到挂载,切换一个符号链接,并可能反弹服务器。 。? 所以容器不需要重新创build和重新部署,对吧? 而在容器中有源代码,那么我认为一个好处就是它是完全独立和可移植的,如果这真的是一个优势? 我有兴趣听到这个人的利弊。 我们的应用程序很小,只有几个人使用,很less会改变。 谢谢

从Docker公开/发布端口

我有一个小的REST API在Docker容器中运行: [2015-10-15 10:47:05] INFO WEBrick 1.3.1 [2015-10-15 10:47:05] INFO ruby 2.2.3 (2015-08-18) [x86_64-linux] [2015-10-15 10:47:05] INFO WEBrick::HTTPServer#start: pid=8 port=9292 我有IP上的docker虚拟机: 192.168.99.100 我正在尝试发布/公开我的端口: docker run –publish 9292:9292 788a36b503e2 泊坞窗ps显示: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d6b34469ebf 788a36b503e2 "/bin/sh -c 'rackup -" 45 seconds ago Up 44 seconds 0.0.0.0:9292->9292/tcp hopeful_bhaskara 而我正在尝试打击REST API: curl 192.168.99.100:9292/auth/3/xyz […]

为什么我的pod不响应暴露端口上的请求?

我刚刚推出了一个基于CoreOS kube-aws脚本的相当基本的集群。 https://coreos.com/kubernetes/docs/latest/kubernetes-on-aws.html 我已经激活了registry加载项,并且正确地代理了我的本地框,因此我可以将图像推送到localhost:5000上的群集。 我也有正确加载在每个节点上的代理pod,以便localhost:5000也将从该registry中拉出图像。 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/registry 然后,我将一个相当简单的Sinatra应用程序docker化到我的集群上运行,并将其推送到registry。 我还准备了一个ReplicationController定义和服务定义来运行应用程序。 图像被拉下来并开始没有问题,我可以使用kubectl复制组的每个窗格获取启动日志。 我的问题是,当我curl的公共ELB端点为我的服务,它只是挂起。 我试过的东西: 我得到了运行我的pod的其中一个节点的公共IP,并尝试在服务描述中描述的NodePort上进行压缩,同样的事情。 我SSH'd到该节点,并试图curl localhost:3000 ,相同的结果。 另外SSH'd到该节点,我试图curl <pod-ip>:3000 ,相同的结果。 ps显示Puma进程在3000端口上运行和监听。 该节点上的docker ps显示应用程序容器未将任何端口转发到主机。 这也许是问题吗? 这些请求必须正确路由,因为在任何其他端口上触发这些IP都会导致connection refused而不是挂起。 我的应用程序的Dockerfile非常简单: FROM ruby:2.2.4-onbuild RUN apt-get update -qq && apt-get install -y \ libpq-dev \ postgresql-client RUN mkdir -p /app WORKDIR /app COPY . /app EXPOSE 3000 ENTRYPOINT ['ruby', '/app/bin/entrypoint.rb'] 其中entrypoint.rb将启动一个在端口3000上侦听的Puma服务器。 我的复制组是这样定义的: […]

将redis链接到sinatra docker容器的正确方法

我正在写一个基于微型服务的小应用程序,并且在其中有一个redis实例,通过Resque可以使用一些ruby代码/容器。 目前在我的泊坞窗撰写我连接像这样: redis: image: redis:latest ports: – '6379:6379' ruby_worker: image: my_user/my_image:latest links: – redis:db 这工作正常(我只把它命名为:db现在的原因,这是我查找链接时发现的示例)。 在我的ruby代码中,我必须设置我的Resque redis服务器,如: Resque.redis = ENV['DB_PORT_6379_TCP_ADDR'] + ':6379' 但是这似乎并不正确。 它依赖于这个确切的redis名称,如果我必须启动一个不同的redis实例(就像我今天在使用docker云时所做的那样),它不会findredis服务器。 总共我有3个容器(到目前为止)连接到这个redis的resque。 一个小的sinatra前端,和2名工人。 我不是一个铁杆的人,3天前从来没有使用过复苏。 所以很抱歉,如果我错过了一些基本知识。 有没有更好的方法来连接到我的ruby代码中的redis实例? 有没有办法在我的docker-composose中传递redis的名字? 现在我的resque-web容器configuration如下,它似乎工作正常: resque: image: ennexa/resque-web links: – redis:redisserver ports: – "5678:5678" command: "-r redis://redisserver:6379"

当我将一个sinatra应用程序dockerize时,应用程序的日志文件会发生什么?

问这个问题甚至是有道理的,看看容器是一个短暂的对象? 如果应用程序的日志没有被redirect到一个持久的服务(他们不是),他们甚至没有保存在容器的(临时)文件系统?