我已经写了一个systemd文件来systemctl启动unicorn:
[Unit]\nDescription=Unicorn server\n\n[Service]\nSyslogIdentifier=my-app-unicorn\nUser=deployer\nPIDFile=/tmp/unicorn.my-app.pid\nWorkingDirectory=/opt/www/my-app.com\n\nExecStart=/home/deployer/.rvm/gems/ruby-2.2.1@my-app/bin/bundle exec "unicorn_rails -D -c /opt/www/my-app.com/config/unicorn.rb -E production"\n#ExecReload=/bin/kill -s HUP $MAINPID\nExecReload=/bin/kill -s USR2 $MAINPID\nExecStop=/bin/kill -s QUIT $MAINPID\n\n[Install]\nWantedBy=multi-user.target\nRun Code Online (Sandbox Code Playgroud)\n\n这是我用来启动服务的命令
\n\n$ sudo systemctl daemon-reload\n$ sudo systemctl start my-app.service\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里检查状态:
\n\n$ sudo systemctl status my-app\n\xe2\x97\x8f my-app.service - My app unicorn server\n Loaded: loaded (/lib/systemd/system/my-app.service; disabled; vendor preset: enabled)\n Active: failed (Result: exit-code) since Tue 2016-03-15 14:56:31 UTC; 4s ago\n Process: 22165 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=200/CHDIR)\n Process: 22162 ExecStart=/home/deployer/.rvm/gems/ruby-2.2.1@my-app/bin/bundle …Run Code Online (Sandbox Code Playgroud) 我必须docker-compose run为我的 Phoenix Web 应用程序项目运行几个命令。从终端我必须运行这个:
$ sudo docker-compose run web mix do deps.get, compile
$ sudo docker-compose run web mix ecto.create
$ sudo docker-compose run web mix ecto.migrate
虽然这工作正常,但我想使用 Ansible 使其自动化。我很清楚有使用docker -compose API的docker_service Ansible 模块,我也知道definition可以轻松将 docker-compose.yml 中的配置隐藏到我的剧本中的选项。我不知道如何确保在启动容器之前运行上述命令。谁能帮我解决这个问题?
我是使用 docker 的新手,到目前为止我无法找到许多包含RVM或 的ruby/rails 图像rbenv。
我看到的最常见的情况是每个容器都有多个标签,并且每个标记的镜像版本只安装了一个版本的 Ruby。例如,请参见此图片。
使用其他版本的唯一方法是为您正在使用的映像使用另一个标签,因为您无法使用 RVM 或 rbenv 安装新版本。
这是故意的吗?
在 docker 容器内使用编程语言的版本管理器是一种不好的做法吗?
为什么?
rvm ×2
ansible-2.x ×1
bundler ×1
docker ×1
dockerfile ×1
ruby ×1
rubygems ×1
systemd ×1
unicorn ×1