docker-rails 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +16 -5
 - data/lib/docker/rails/app.rb +45 -12
 - data/lib/docker/rails/cli/main.rb +12 -21
 - data/lib/docker/rails/ext/container.rb +27 -6
 - data/lib/docker/rails/version.rb +1 -1
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ec5c1185350ab97e62cf01109148ddf3423d1610
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: d0e552e9dba679b392c90ec2bc567332d0b79bcb
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1da0e5553d88912677d1e7108a3804a014d68ff6d6958c181e18490465323b6bb74ad5cac06754c093972446c52cf9c554a56f372877c4bedaf10fea4e52e8b5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d9288310748ee68a9477aa009cba469f808bb1d27cd181bb7177574219a71b48d7630d786268d5e1396a73fd835ef5c15f74402191cae8e76769a452861a6b43
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -12,6 +12,7 @@ A simplified pattern to execute rails applications within Docker (with a CI buil 
     | 
|
| 
       12 
12 
     | 
    
         
             
            - Automated cached global gems data volume based on ruby version
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Interpolates variables `docker-compose.yml` making CI builds much easier
         
     | 
| 
       14 
14 
     | 
    
         
             
            - DB check CLI function provided for docker-compose `command` to check if db is ready
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Configurable exit_code for `ci` - determine which container's exit code will be the result of the process (useful for CI tests)
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
            ## Usage
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
         @@ -19,7 +20,7 @@ A simplified pattern to execute rails applications within Docker (with a CI buil 
     | 
|
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
            CI, the reason this is built. Do it all, do it consistently, do it concurrently, do it easily, and always cleanup after yourself.
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            ` 
     | 
| 
      
 23 
     | 
    
         
            +
            `docker-rails ci test`
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
            #### CI workflow
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
         @@ -39,20 +40,30 @@ CI, the reason this is built. Do it all, do it consistently, do it concurrently, 
     | 
|
| 
       39 
40 
     | 
    
         | 
| 
       40 
41 
     | 
    
         
             
            #### CI execution options
         
     | 
| 
       41 
42 
     | 
    
         | 
| 
      
 43 
     | 
    
         
            +
            **NOTE:** If using `bundle exec`, you'll need to do a `bundle` on both the host and container.  These examples avoid `bundle exec` on the host for that reason (ran inside rvm).  
         
     | 
| 
      
 44 
     | 
    
         
            +
              
         
     | 
| 
      
 45 
     | 
    
         
            +
            In your environment, ensure that `docker-rails` is present:
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 48 
     | 
    
         
            +
            gem install --no-ri --no-rdoc docker-rails
         
     | 
| 
      
 49 
     | 
    
         
            +
            ```
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            Then run it:
         
     | 
| 
      
 52 
     | 
    
         
            +
              
         
     | 
| 
       42 
53 
     | 
    
         
             
            ```bash
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
            docker-rails ci --build=222 test
         
     | 
| 
       44 
55 
     | 
    
         
             
            ```
         
     | 
| 
       45 
56 
     | 
    
         | 
| 
       46 
57 
     | 
    
         
             
            or with the environment variable option
         
     | 
| 
       47 
58 
     | 
    
         | 
| 
       48 
59 
     | 
    
         
             
            ```bash
         
     | 
| 
       49 
     | 
    
         
            -
            DOCKER_RAILS_BUILD=222  
     | 
| 
      
 60 
     | 
    
         
            +
            DOCKER_RAILS_BUILD=222 docker-rails ci test
         
     | 
| 
       50 
61 
     | 
    
         
             
            ```
         
     | 
| 
       51 
62 
     | 
    
         | 
| 
       52 
63 
     | 
    
         
             
            or for local testing (uses `1` for build)
         
     | 
| 
       53 
64 
     | 
    
         | 
| 
       54 
65 
     | 
    
         
             
            ```bash
         
     | 
| 
       55 
     | 
    
         
            -
              
     | 
| 
      
 66 
     | 
    
         
            +
             docker-rails ci test
         
     | 
| 
       56 
67 
     | 
    
         
             
            ```
         
     | 
| 
       57 
68 
     | 
    
         | 
| 
       58 
69 
     | 
    
         
             
            ### General CLI
         
     | 
| 
         @@ -86,7 +97,6 @@ Options: 
     | 
|
| 
       86 
97 
     | 
    
         
             
            Open to pull requests. Open to refactoring. It can be expanded to suit many different configurations.
         
     | 
| 
       87 
98 
     | 
    
         | 
| 
       88 
99 
     | 
    
         
             
            TODO:
         
     | 
| 
       89 
     | 
    
         
            -
            - **Permissions** - [Shared volume for project has files written as root](https://github.com/alienfast/docker-rails/issues/5)
         
     | 
| 
       90 
100 
     | 
    
         
             
            - **DB versatility** - expand to different db status detection as-needed e.g. postgres. CLI is now modularized to allow for this.
         
     | 
| 
       91 
101 
     | 
    
         | 
| 
       92 
102 
     | 
    
         | 
| 
         @@ -142,6 +152,7 @@ The rails engine example below shows an example with all of the environments `de 
     | 
|
| 
       142 
152 
     | 
    
         | 
| 
       143 
153 
     | 
    
         
             
            ```yaml
         
     | 
| 
       144 
154 
     | 
    
         
             
            verbose: true
         
     | 
| 
      
 155 
     | 
    
         
            +
            exit_code: web
         
     | 
| 
       145 
156 
     | 
    
         
             
            before_command: bash -c "rm -Rf target && rm -Rf spec/dummy/log"
         
     | 
| 
       146 
157 
     | 
    
         | 
| 
       147 
158 
     | 
    
         
             
            extractions: &extractions
         
     | 
    
        data/lib/docker/rails/app.rb
    CHANGED
    
    | 
         @@ -3,7 +3,15 @@ module Docker 
     | 
|
| 
       3 
3 
     | 
    
         
             
                require 'singleton'
         
     | 
| 
       4 
4 
     | 
    
         
             
                class App
         
     | 
| 
       5 
5 
     | 
    
         
             
                  include Singleton
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_reader :config, 
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_reader :config,
         
     | 
| 
      
 7 
     | 
    
         
            +
                              :compose_config,
         
     | 
| 
      
 8 
     | 
    
         
            +
                              :ruby_version,
         
     | 
| 
      
 9 
     | 
    
         
            +
                              :build,
         
     | 
| 
      
 10 
     | 
    
         
            +
                              :target,
         
     | 
| 
      
 11 
     | 
    
         
            +
                              :gems_volume_path,
         
     | 
| 
      
 12 
     | 
    
         
            +
                              :gems_volume_name,
         
     | 
| 
      
 13 
     | 
    
         
            +
                              :compose_filename,
         
     | 
| 
      
 14 
     | 
    
         
            +
                              :exit_code
         
     | 
| 
       7 
15 
     | 
    
         | 
| 
       8 
16 
     | 
    
         
             
                  class << self
         
     | 
| 
       9 
17 
     | 
    
         
             
                    def configured(target, options)
         
     | 
| 
         @@ -95,6 +103,13 @@ module Docker 
     | 
|
| 
       95 
103 
     | 
    
         | 
| 
       96 
104 
     | 
    
         
             
                    @compose_config = Docker::Rails::ComposeConfig.new
         
     | 
| 
       97 
105 
     | 
    
         
             
                    @compose_config.load!(nil, @compose_filename)
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    # check the exit_code
         
     | 
| 
      
 108 
     | 
    
         
            +
                    if @config['exit_code'].nil?
         
     | 
| 
      
 109 
     | 
    
         
            +
                      first_defined_service = @compose_config.keys[0]
         
     | 
| 
      
 110 
     | 
    
         
            +
                      puts "exit_code not set in configuration, using exit code from first defined service: #{first_defined_service}"
         
     | 
| 
      
 111 
     | 
    
         
            +
                      @config['exit_code'] = first_defined_service
         
     | 
| 
      
 112 
     | 
    
         
            +
                    end
         
     | 
| 
       98 
113 
     | 
    
         
             
                  end
         
     | 
| 
       99 
114 
     | 
    
         | 
| 
       100 
115 
     | 
    
         
             
                  def rm_compose
         
     | 
| 
         @@ -102,46 +117,64 @@ module Docker 
     | 
|
| 
       102 
117 
     | 
    
         
             
                    exec "rm #{compose_filename_from '*', '*'}" rescue ''
         
     | 
| 
       103 
118 
     | 
    
         
             
                  end
         
     | 
| 
       104 
119 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                  def  
     | 
| 
      
 120 
     | 
    
         
            +
                  def before_command
         
     | 
| 
       106 
121 
     | 
    
         
             
                    before_command = @config['before_command']
         
     | 
| 
       107 
122 
     | 
    
         
             
                    (exec before_command unless before_command.nil?) #unless skip? :before_command
         
     | 
| 
       108 
123 
     | 
    
         
             
                  end
         
     | 
| 
       109 
124 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                  def  
     | 
| 
      
 125 
     | 
    
         
            +
                  def up(options = '')
         
     | 
| 
       111 
126 
     | 
    
         
             
                    # Run the compose configuration
         
     | 
| 
       112 
127 
     | 
    
         
             
                    exec_compose 'up', false, options #unless skip? :up
         
     | 
| 
       113 
128 
     | 
    
         
             
                  end
         
     | 
| 
       114 
129 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
                  def  
     | 
| 
      
 130 
     | 
    
         
            +
                  def build
         
     | 
| 
       116 
131 
     | 
    
         
             
                    # Run the compose configuration
         
     | 
| 
       117 
132 
     | 
    
         
             
                    exec_compose 'build'
         
     | 
| 
       118 
133 
     | 
    
         
             
                  end
         
     | 
| 
       119 
134 
     | 
    
         | 
| 
       120 
     | 
    
         
            -
                  def  
     | 
| 
      
 135 
     | 
    
         
            +
                  def ps
         
     | 
| 
       121 
136 
     | 
    
         
             
                    # Run the compose configuration
         
     | 
| 
       122 
137 
     | 
    
         
             
                    exec_compose 'ps'
         
     | 
| 
       123 
138 
     | 
    
         
             
                  end
         
     | 
| 
       124 
139 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
                  def  
     | 
| 
      
 140 
     | 
    
         
            +
                  def ps_all
         
     | 
| 
       126 
141 
     | 
    
         
             
                    puts "\n\nAll remaining containers..."
         
     | 
| 
       127 
142 
     | 
    
         
             
                    puts '-----------------------------'
         
     | 
| 
       128 
143 
     | 
    
         
             
                    exec 'docker ps -a'
         
     | 
| 
       129 
144 
     | 
    
         
             
                  end
         
     | 
| 
       130 
145 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
                  def  
     | 
| 
      
 146 
     | 
    
         
            +
                  def stop
         
     | 
| 
       132 
147 
     | 
    
         
             
                    puts "\n\n\n\nStopping containers..."
         
     | 
| 
       133 
148 
     | 
    
         
             
                    puts '-----------------------------'
         
     | 
| 
       134 
149 
     | 
    
         
             
                    containers = Docker::Container.all(all: true)
         
     | 
| 
       135 
150 
     | 
    
         
             
                    containers.each do |container|
         
     | 
| 
       136 
151 
     | 
    
         
             
                      if is_build_container?(container)
         
     | 
| 
       137 
     | 
    
         
            -
                         
     | 
| 
      
 152 
     | 
    
         
            +
                        printf "#{container.name}.."
         
     | 
| 
       138 
153 
     | 
    
         
             
                        container.stop
         
     | 
| 
      
 154 
     | 
    
         
            +
                        60.times do |i|
         
     | 
| 
      
 155 
     | 
    
         
            +
                          printf '.'
         
     | 
| 
      
 156 
     | 
    
         
            +
                          if container.down?
         
     | 
| 
      
 157 
     | 
    
         
            +
                            printf "done.\n"
         
     | 
| 
      
 158 
     | 
    
         
            +
                            break
         
     | 
| 
      
 159 
     | 
    
         
            +
                          end
         
     | 
| 
      
 160 
     | 
    
         
            +
                          sleep 1
         
     | 
| 
      
 161 
     | 
    
         
            +
                        end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                        service_name = container.compose.service
         
     | 
| 
      
 164 
     | 
    
         
            +
                        if @config['exit_code'].eql?(service_name)
         
     | 
| 
      
 165 
     | 
    
         
            +
                          if container.up?
         
     | 
| 
      
 166 
     | 
    
         
            +
                            puts "Unable to determine exit code, the #{service_name} is still up, current status: #{container.status}"
         
     | 
| 
      
 167 
     | 
    
         
            +
                            @exit_code = -999
         
     | 
| 
      
 168 
     | 
    
         
            +
                          else
         
     | 
| 
      
 169 
     | 
    
         
            +
                            @exit_code = container.exit_code
         
     | 
| 
      
 170 
     | 
    
         
            +
                          end
         
     | 
| 
      
 171 
     | 
    
         
            +
                        end
         
     | 
| 
       139 
172 
     | 
    
         
             
                      end
         
     | 
| 
       140 
173 
     | 
    
         
             
                    end
         
     | 
| 
       141 
174 
     | 
    
         
             
                    puts 'Done.'
         
     | 
| 
       142 
175 
     | 
    
         
             
                  end
         
     | 
| 
       143 
176 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                  def  
     | 
| 
      
 177 
     | 
    
         
            +
                  def rm_volumes
         
     | 
| 
       145 
178 
     | 
    
         
             
                    puts "\n\nRemoving container volumes..."
         
     | 
| 
       146 
179 
     | 
    
         
             
                    puts '-----------------------------'
         
     | 
| 
       147 
180 
     | 
    
         | 
| 
         @@ -149,7 +182,7 @@ module Docker 
     | 
|
| 
       149 
182 
     | 
    
         
             
                    containers = Docker::Container.all(all: true)
         
     | 
| 
       150 
183 
     | 
    
         
             
                    containers.each do |container|
         
     | 
| 
       151 
184 
     | 
    
         
             
                      if is_build_container?(container)
         
     | 
| 
       152 
     | 
    
         
            -
                        puts container. 
     | 
| 
      
 185 
     | 
    
         
            +
                        puts container.name
         
     | 
| 
       153 
186 
     | 
    
         
             
                        container.remove(v: true, force: true)
         
     | 
| 
       154 
187 
     | 
    
         
             
                      end
         
     | 
| 
       155 
188 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -166,12 +199,12 @@ module Docker 
     | 
|
| 
       166 
199 
     | 
    
         
             
                    puts 'Done.'
         
     | 
| 
       167 
200 
     | 
    
         
             
                  end
         
     | 
| 
       168 
201 
     | 
    
         | 
| 
       169 
     | 
    
         
            -
                  def  
     | 
| 
      
 202 
     | 
    
         
            +
                  def run_service_command(service_name, command)
         
     | 
| 
       170 
203 
     | 
    
         
             
                    # Run the compose configuration
         
     | 
| 
       171 
204 
     | 
    
         
             
                    exec_compose "run #{service_name} #{command}"
         
     | 
| 
       172 
205 
     | 
    
         
             
                  end
         
     | 
| 
       173 
206 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
                  def  
     | 
| 
      
 207 
     | 
    
         
            +
                  def bash_connect(service_name)
         
     | 
| 
       175 
208 
     | 
    
         
             
                    # docker exec -it 2ed97d0bb938 bash
         
     | 
| 
       176 
209 
     | 
    
         
             
                    container = get_container(service_name)
         
     | 
| 
       177 
210 
     | 
    
         
             
                    if container.nil?
         
     | 
| 
         @@ -22,7 +22,7 @@ module Docker 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    def ci(target)
         
     | 
| 
       24 
24 
     | 
    
         
             
                      # init singleton with full options
         
     | 
| 
       25 
     | 
    
         
            -
                      App.configured(target, options)
         
     | 
| 
      
 25 
     | 
    
         
            +
                      app = App.configured(target, options)
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                      invoke :before, [target], []
         
     | 
| 
       28 
28 
     | 
    
         
             
                      invoke :compose, [target], []
         
     | 
| 
         @@ -33,6 +33,8 @@ module Docker 
     | 
|
| 
       33 
33 
     | 
    
         
             
                      ensure
         
     | 
| 
       34 
34 
     | 
    
         
             
                        invoke :cleanup
         
     | 
| 
       35 
35 
     | 
    
         
             
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                      exit app.exit_code
         
     | 
| 
       36 
38 
     | 
    
         
             
                    end
         
     | 
| 
       37 
39 
     | 
    
         | 
| 
       38 
40 
     | 
    
         
             
                    desc 'extract <target>', 'Invoke extractions', hide: true
         
     | 
| 
         @@ -69,17 +71,16 @@ module Docker 
     | 
|
| 
       69 
71 
     | 
    
         
             
                      compose_options = ''
         
     | 
| 
       70 
72 
     | 
    
         
             
                      compose_options = '-d' if options[:detached]
         
     | 
| 
       71 
73 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
                      app. 
     | 
| 
      
 74 
     | 
    
         
            +
                      app.up(compose_options)
         
     | 
| 
       73 
75 
     | 
    
         
             
                    end
         
     | 
| 
       74 
76 
     | 
    
         | 
| 
       75 
77 
     | 
    
         
             
                    desc 'build <target>', 'Build for the given build/target e.g. bundle exec docker-rails build --build=222 development'
         
     | 
| 
       76 
78 
     | 
    
         | 
| 
       77 
79 
     | 
    
         
             
                    def build(target)
         
     | 
| 
       78 
80 
     | 
    
         
             
                      invoke :compose
         
     | 
| 
       79 
     | 
    
         
            -
                      App.configured(target, options). 
     | 
| 
      
 81 
     | 
    
         
            +
                      App.configured(target, options).build
         
     | 
| 
       80 
82 
     | 
    
         
             
                    end
         
     | 
| 
       81 
83 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
84 
     | 
    
         
             
                    desc 'compose <target>', 'Writes a resolved docker-compose.yml file e.g. bundle exec docker-rails compose --build=222 test'
         
     | 
| 
       84 
85 
     | 
    
         | 
| 
       85 
86 
     | 
    
         
             
                    def compose(target)
         
     | 
| 
         @@ -91,22 +92,21 @@ module Docker 
     | 
|
| 
       91 
92 
     | 
    
         
             
                    def before(target)
         
     | 
| 
       92 
93 
     | 
    
         
             
                      app = App.configured(target, options)
         
     | 
| 
       93 
94 
     | 
    
         
             
                      invoke :compose, [target], []
         
     | 
| 
       94 
     | 
    
         
            -
                      app. 
     | 
| 
      
 95 
     | 
    
         
            +
                      app.before_command
         
     | 
| 
       95 
96 
     | 
    
         
             
                    end
         
     | 
| 
       96 
97 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
98 
     | 
    
         
             
                    desc 'stop <target>', 'Stop all running containers for the given build/target e.g. bundle exec docker-rails stop --build=222 development'
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
100 
     | 
    
         
             
                    def stop(target)
         
     | 
| 
       101 
101 
     | 
    
         
             
                      invoke :compose
         
     | 
| 
       102 
     | 
    
         
            -
                      App.configured(target, options). 
     | 
| 
      
 102 
     | 
    
         
            +
                      App.configured(target, options).stop
         
     | 
| 
       103 
103 
     | 
    
         
             
                    end
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
       105 
105 
     | 
    
         
             
                    desc 'rm_volumes <target>', 'Stop all running containers and remove corresponding volumes for the given build/target e.g. bundle exec docker-rails rm_volumes --build=222 development'
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
107 
     | 
    
         
             
                    def rm_volumes(target)
         
     | 
| 
       108 
108 
     | 
    
         
             
                      invoke :stop
         
     | 
| 
       109 
     | 
    
         
            -
                      App.configured(target, options). 
     | 
| 
      
 109 
     | 
    
         
            +
                      App.configured(target, options).rm_volumes
         
     | 
| 
       110 
110 
     | 
    
         
             
                    end
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
112 
     | 
    
         
             
                    desc 'rm_compose', 'Remove generated docker_compose file e.g. bundle exec docker-rails rm_compose --build=222 development', hide: true
         
     | 
| 
         @@ -125,13 +125,13 @@ module Docker 
     | 
|
| 
       125 
125 
     | 
    
         | 
| 
       126 
126 
     | 
    
         
             
                    def ps(target)
         
     | 
| 
       127 
127 
     | 
    
         
             
                      invoke :compose
         
     | 
| 
       128 
     | 
    
         
            -
                      App.configured(target, options). 
     | 
| 
      
 128 
     | 
    
         
            +
                      App.configured(target, options).ps
         
     | 
| 
       129 
129 
     | 
    
         
             
                    end
         
     | 
| 
       130 
130 
     | 
    
         | 
| 
       131 
131 
     | 
    
         
             
                    desc 'ps_all', 'List all remaining containers regardless of state e.g. bundle exec docker-rails ps_all'
         
     | 
| 
       132 
132 
     | 
    
         | 
| 
       133 
133 
     | 
    
         
             
                    def ps_all(build = nil, target = nil)
         
     | 
| 
       134 
     | 
    
         
            -
                      App.instance. 
     | 
| 
      
 134 
     | 
    
         
            +
                      App.instance.ps_all
         
     | 
| 
       135 
135 
     | 
    
         
             
                    end
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
137 
     | 
    
         
             
                    desc 'bash_connect <target> <service_name>', 'Open a bash shell to a running container (with automatic cleanup) e.g. bundle exec docker-rails bash --build=222 development db'
         
     | 
| 
         @@ -142,7 +142,7 @@ module Docker 
     | 
|
| 
       142 
142 
     | 
    
         | 
| 
       143 
143 
     | 
    
         
             
                      invoke :compose, [target], []
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
                      container = app. 
     | 
| 
      
 145 
     | 
    
         
            +
                      container = app.bash_connect(service_name)
         
     | 
| 
       146 
146 
     | 
    
         | 
| 
       147 
147 
     | 
    
         
             
                      # Automatically cleanup any remnants of a simple bash session.
         
     | 
| 
       148 
148 
     | 
    
         
             
                      return if container.nil?
         
     | 
| 
         @@ -150,7 +150,6 @@ module Docker 
     | 
|
| 
       150 
150 
     | 
    
         
             
                      container.remove(v: true, force: true)
         
     | 
| 
       151 
151 
     | 
    
         
             
                    end
         
     | 
| 
       152 
152 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
153 
     | 
    
         
             
                    desc 'exec <target> <service_name> <command>', 'Run an arbitrary command on a given service container e.g. bundle exec docker-rails exec --build=222 development db bash'
         
     | 
| 
       155 
154 
     | 
    
         | 
| 
       156 
155 
     | 
    
         
             
                    def exec(target, service_name, command)
         
     | 
| 
         @@ -159,16 +158,8 @@ module Docker 
     | 
|
| 
       159 
158 
     | 
    
         | 
| 
       160 
159 
     | 
    
         
             
                      invoke :compose, [target], []
         
     | 
| 
       161 
160 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
                      app. 
     | 
| 
      
 161 
     | 
    
         
            +
                      app.run_service_command(service_name, command)
         
     | 
| 
       163 
162 
     | 
    
         
             
                    end
         
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                    protected
         
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
                    # invoke with an empty set of options
         
     | 
| 
       169 
     | 
    
         
            -
                    # def invoke_new(command, options=[])
         
     | 
| 
       170 
     | 
    
         
            -
                    #   invoke command, nil, options
         
     | 
| 
       171 
     | 
    
         
            -
                    # end
         
     | 
| 
       172 
163 
     | 
    
         
             
                  end
         
     | 
| 
       173 
164 
     | 
    
         
             
                end
         
     | 
| 
       174 
165 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1,12 +1,38 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Docker::Container
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
              def name
         
     | 
| 
      
 4 
     | 
    
         
            +
                info['Names'][0].gsub(/^\//, '')
         
     | 
| 
      
 5 
     | 
    
         
            +
              end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def status
         
     | 
| 
      
 8 
     | 
    
         
            +
                info['Status']
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def up?
         
     | 
| 
      
 12 
     | 
    
         
            +
                status =~ /^(up|Up)/
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def down?
         
     | 
| 
      
 16 
     | 
    
         
            +
                !up?
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def exit_code
         
     | 
| 
      
 20 
     | 
    
         
            +
                return nil if up?
         
     | 
| 
      
 21 
     | 
    
         
            +
                return nil unless (status =~ /xited/)
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                #  Up 10 seconds
         
     | 
| 
      
 24 
     | 
    
         
            +
                #  Exited (0) 2 seconds ago
         
     | 
| 
      
 25 
     | 
    
         
            +
                status =~ /^.* \((\w+)\)/
         
     | 
| 
      
 26 
     | 
    
         
            +
                $1.to_i
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       3 
29 
     | 
    
         
             
              def compose
         
     | 
| 
       4 
30 
     | 
    
         
             
                return nil unless Compose.is_compose_container?(self)
         
     | 
| 
       5 
31 
     | 
    
         
             
                @_compose ||= Compose.new(self)
         
     | 
| 
       6 
32 
     | 
    
         
             
              end
         
     | 
| 
       7 
33 
     | 
    
         | 
| 
       8 
34 
     | 
    
         
             
              class Compose
         
     | 
| 
       9 
     | 
    
         
            -
                attr_reader :number, :oneoff, :project, :service, :version 
     | 
| 
      
 35 
     | 
    
         
            +
                attr_reader :number, :oneoff, :project, :service, :version
         
     | 
| 
       10 
36 
     | 
    
         | 
| 
       11 
37 
     | 
    
         
             
                def initialize(container)
         
     | 
| 
       12 
38 
     | 
    
         
             
                  labels = container.info['Labels']
         
     | 
| 
         @@ -15,11 +41,6 @@ class Docker::Container 
     | 
|
| 
       15 
41 
     | 
    
         
             
                  @oneoff = !!labels['com.docker.compose.oneoff']
         
     | 
| 
       16 
42 
     | 
    
         
             
                  @number = labels['com.docker.compose.container-number'].to_i
         
     | 
| 
       17 
43 
     | 
    
         
             
                  @version = labels['com.docker.compose.version']
         
     | 
| 
       18 
     | 
    
         
            -
                  @name = container.info['Names'][0].gsub(/^\//, '')
         
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                def to_s
         
     | 
| 
       22 
     | 
    
         
            -
                  @name
         
     | 
| 
       23 
44 
     | 
    
         
             
                end
         
     | 
| 
       24 
45 
     | 
    
         | 
| 
       25 
46 
     | 
    
         
             
                class << self
         
     | 
    
        data/lib/docker/rails/version.rb
    CHANGED