使用RubyMine和Docker进行开发

时间:2016-06-26 15:29:33

标签: ruby-on-rails docker rubymine

我试图开发一个Rails项目,而不必在我的Windows本地计算机上安装Ruby和所有服务器工具。我已经创建了我的Docker容器(Ruby和MySQL)并在RubyMine 2016.1上安装了Docker插件,但是对于开发日常使用似乎不太实用,我的意思是在部署到测试之前的周期开发,运行,调试服务器

我是否遗漏了使这个工作流程成为可能的事情?或者Docker是否在开发过程中为此步骤提出建议?

1 个答案:

答案 0 :(得分:2)

我不是在Windows下开发的,但是我在Mac OS X下如何处理这个问题。首先,我的Rails项目设置了一个Guardfile,用于启动rails(guard-rails gem并且还在我进行更改时管理运行我的测试(guard-minitest gem)。在开发过程中获得快速周转时间非常重要。

启动docker daemonized,将本地目录挂载到docker镜像中,使用暴露的端口3000,运行一个永无止境的命令。

docker run -d -v {local Rails root}:/home/{railsapp} -p 3000:3000 {image id} tail -f /dev/null

我这样做,所以我可以使用任意数量的shell连接它,进行我只能在本地进行的任何活动。

Ruby 2.2.5,Rails 5和一堆Unix开发人员工具(heroku toolbelt,gcc等人)安装在容器中。我没有设置单独的数据库容器,因为我使用SQLite3进行开发,使用pg进行生产(heroku)。最终,当我的数据库使用变得更复杂时,我需要设置它,但在此之前,它可以很好地开始使用。

我将RubyMine指向本地rails根目录。这样,任何更改都会立即反映在容器中。在另一个命令行中,我旋转($是主机,#是容器):

$ docker exec -it {container id} /bin/bash
# cd /home/{railsapp}
# bundle install
# bundle exec rake db:migrate
# bundle exec guard
  • bundle install仅在我第一次更改Gemfile时才会显示。
  • bundle exec rake db:migrate仅在我第一次进行数据库更改时才会发生。

此时我通常有一个Rails实例,我可以浏览到localhost:3000,并且RubyMine项目是同步的'到Docker镜像。然后,我主要在RubyMine中进行更改,忽略没有安装各种gem等的消息,并专注于在开发过程中保持我的测试运行干净。

为了在遇到异常时处理控制台,我需要添加:

config.web_console.whitelisted_ips = ['172.16.0.0/12', '192.168.0.0/16']

config/environments/development.rb,以便在开发中发生异常时允许Web调试控制台。 (在所有情况下可能都不需要192.168/*,但有些人遇到了需要它的问题。)

我仍然无法使用RubyMine调试 ,但我不会在任何地方错过它,就像我想的那样,特别是在可以使用网络控制台的情况下。此外,它允许我在开发环境中完全运行所有酷工具,而不会污染我的主机系统。

我花了一天时间试图让远程调试器工作,但核心问题似乎是(ruby-debug的工作方式)你需要允许调试过程(在docker容器中)到# 39;伸手去拿'到主机的端口连接并发送调试信息。不幸的是,绑定端口会使它们“正在使用”,因此您无法创建“只听”字样。从host / RubyMine到特定容器端口的连接。我认为这只是目前Docker的一个限制,并且改变了 Docker处理网络的方式,的方式与ruby-debug-ide相同命令处理传输调试信息将有助于解决它。

这种方法的结果是它允许我非常快速的测试周转时间,以及浏览器内开发同样快速的周转时间。这对于新的应用程序开发来说是最佳选择,但如果您拥有一个庞大,陈旧,苛刻且经过较少测试的代码库,则可能无法正常工作。

大多数/所有这些功能也应该存在于Windows版本的Docker中。