docker_rails_proxy 0.1.10 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5008c7df40c8205919dcdaa5545a13841f1b1e36c90ce5ac3ed5912fb75d3d2b
4
- data.tar.gz: 27cc29c48a8e84254bcf6cb4ef5f7ca6868168b9a3b3f21a74dab96b90496ba7
3
+ metadata.gz: 11cc5b5ffa094628db0143b27de25323c7c6e610ff51f3bc3cfd308c0d944e0e
4
+ data.tar.gz: c151d104cbc5835d2afa116c667eee6241ff728d7fb66df49b4a80ad34b07473
5
5
  SHA512:
6
- metadata.gz: 56fb302cf1af8c2f7632e9502b63142dd349c6ef08b8272e33dd7aeb4a2fe41ddba687baf23640532f4a2f75c3c44a0dac76cfe6e7d0a15c905ba0a5e6b9f955
7
- data.tar.gz: d56a4f0a5287a0b1a2862876e7c65046c217eb11194c02c631b0ab4206b73cb8d82e225dfe7de59c8709d485156c33d2ae9fb510748da67f290edb12c7ee9198
6
+ metadata.gz: 7177b8ff7a8918bb156065c3e5832269d70cccf1b8575544b06e455e085e6b0d77743d07fdd84e00ec55f1b6dc00cd7ae308c65080e588c5484a76293b1dc387
7
+ data.tar.gz: 83ab38f68fef1981fb682dd57e2f4cb7063a143017e322bc57fb6431affda117cecf52c8cca23b73fe8c8b9066282b3e79583325bd68eeca639596b41d757a3c
data/README.md CHANGED
@@ -1,6 +1,28 @@
1
1
  ### To release a new version
2
2
 
3
- Update `lib/docker_rails_proxy/version.rb` with the new version and commit that change.
3
+ **Test locally**
4
+
5
+ change the version on `lib/docker_rails_proxy/version.rb`
6
+
7
+ and build the gem
8
+
9
+ ```
10
+ gem build docker_rails_proxy.gemspec [ruby-2.6.3]
11
+ Successfully built RubyGem
12
+ Name: docker_rails_proxy
13
+ Version: 0.1.13
14
+ File: docker_rails_proxy-0.1.13.gem
15
+ ```
16
+
17
+ on the repo when you want to test, i.e `~/Projects/Eureka`
18
+
19
+ install the local gem
20
+
21
+ ```
22
+ gem install docker_rails_proxy -l ~/Projects/docker_rails_proxy/docker_rails_proxy-0.1.13.gem
23
+ ```
24
+
25
+ Once it's ready, create the tag and push
4
26
 
5
27
  **Git Tag**
6
28
  ```bash
@@ -12,6 +34,5 @@ git push origin v0.0.1
12
34
 
13
35
  The user on rubygems.org is eureaktechteam@gmail.com. Credentials are in 1password "Eureka Tech" vault
14
36
  ```bash
15
- gem build docker_rails_proxy.gemspec
16
37
  gem push docker_rails_proxy-0.0.1.gem
17
38
  ```
@@ -27,10 +27,11 @@ module DockerRailsProxy
27
27
  include Rsync
28
28
  include Logger
29
29
 
30
- attr_reader :arguments
30
+ attr_reader :arguments, :additional_arguments
31
31
 
32
- def initialize(arguments:)
33
- @arguments = arguments
32
+ def initialize(arguments:, additional_arguments:)
33
+ @arguments = arguments
34
+ @additional_arguments = additional_arguments
34
35
  end
35
36
 
36
37
  class << self
@@ -129,7 +130,7 @@ module DockerRailsProxy
129
130
  attr_accessor :vm_provisioner, :kubernetes_running
130
131
  end
131
132
 
132
- attr_accessor :app_container_id
133
+ attr_accessor :app_container_id, :docker_options
133
134
 
134
135
  before_initialize do
135
136
  unless system 'type docker &> /dev/null'
@@ -167,6 +168,8 @@ module DockerRailsProxy
167
168
  end if Docker.kubernetes_running
168
169
  end
169
170
 
171
+ after_initialize { self.docker_options = {} }
172
+ after_initialize { docker_arguments_parser.parse!(additional_arguments) }
170
173
  after_initialize :set_app_container_id
171
174
 
172
175
  private
@@ -185,7 +188,7 @@ module DockerRailsProxy
185
188
 
186
189
  def get_docker_container_id(app, container: nil)
187
190
  if docker_compose?
188
- %x(docker ps -q --filter "name=^/#{[app, container].compact.join('_')}$").strip
191
+ %x(docker ps -q --filter "name=#{[app, container].compact.join('_')}$").strip
189
192
  elsif kubernetes?
190
193
  pod_name = %x(kubectl get pod -l "app=#{app}" 2> /dev/null | grep Running | awk '{print $1}').strip
191
194
  return '' if pod_name.empty?
@@ -199,17 +202,48 @@ module DockerRailsProxy
199
202
  tty: false,
200
203
  container_id: app_container_id,
201
204
  replace_process: false,
202
- user: nil,
203
205
  **)
204
206
 
205
- options = []
207
+ docker_options['-ti'] = nil if tty
206
208
 
207
- options << '-ti' if tty
208
- options << "-u #{user}" if user
209
+ command = [
210
+ 'docker exec',
211
+ docker_options.map { |key, value| [key, value].compact.join(' ') },
212
+ container_id,
213
+ command
214
+ ].join(' '.freeze)
209
215
 
210
- command = "docker exec #{options.join(' '.freeze)} #{container_id} #{command}"
211
216
  replace_process ? exec(command) : system(command)
212
217
  end
218
+
219
+ def docker_arguments_parser
220
+ @docker_arguments_parser ||= OptionParser.new do |opts|
221
+ opts.banner = "Usage: bin/#{APP_NAME} #{self.class.name.demodulize.parameterize} -- [<docker exec arguments>]".bold
222
+
223
+ opts.on('-w', '--workdir WORKDIR', 'Working directory inside the container') do |workdir|
224
+ docker_options['-w'] = workdir
225
+ end
226
+
227
+ opts.on('-u', '--user USER', 'Username or UID (format: <name|uid>[:<group|gid>])') do |user|
228
+ docker_options['-u'] = user
229
+ end
230
+
231
+ opts.on('-t', '--tty', 'Allocate a pseudo-TTY') do |tty|
232
+ docker_options['-t'] = nil
233
+ end
234
+
235
+ opts.on('-i', '--interactive', 'Keep STDIN open even if not attached') do |interactive|
236
+ docker_options['-i'] = nil
237
+ end
238
+
239
+ yield opts if block_given?
240
+
241
+ opts.on('-h', '--help', 'Display this screen') do
242
+ puts opts
243
+ exit
244
+ end
245
+ end
246
+ end
213
247
  end
214
248
 
215
249
  class DockerMainApp < Docker
@@ -2,20 +2,23 @@ module DockerRailsProxy
2
2
  class Cli
3
3
  class << self
4
4
  def invoke(arguments)
5
- command, *args = arguments
5
+ command, *all_arguments = arguments
6
+ arguments, additional_arguments = split_arguments(all_arguments)
6
7
 
7
8
  if command.nil?
8
9
  $stderr.puts <<-EOF
9
10
  #{"bin/#{APP_NAME} requires 1 argument.".bold}
10
11
 
11
- #{"Usage: bin/#{APP_NAME} <command> [<args>]".bold}
12
+ #{"Usage: bin/#{APP_NAME} <command> [<arguments>]".bold}
12
13
  EOF
13
14
  exit 1
14
15
  end
15
16
 
16
17
  if COMMANDS.include? command
17
- args << '-h' if args.empty?
18
- "DockerRailsProxy::#{command}".constantize.(arguments: args)
18
+ arguments << '-h' if arguments.empty?
19
+ "DockerRailsProxy::#{command}".constantize.(
20
+ arguments: arguments, additional_arguments: additional_arguments
21
+ )
19
22
  else
20
23
  $stderr.puts <<-EOS
21
24
  #{'No such command'.yellow}
@@ -25,13 +28,28 @@ module DockerRailsProxy
25
28
 
26
29
  COMMANDS.each do |script|
27
30
  $stderr.puts <<-EOS
28
- #{script.parameterize.bold} [<args>]
31
+ #{script.parameterize.bold} [<arguments>]
29
32
  EOS
30
33
  end
31
34
 
32
35
  exit 1
33
36
  end
34
37
  end
38
+
39
+ private
40
+
41
+ def split_arguments(arguments)
42
+ arguments = arguments.join(' ') if arguments.is_a?(Array)
43
+ arguments, additional_arguments = arguments.split(' -- ')
44
+ [parse_arguments(arguments), parse_arguments(additional_arguments)]
45
+ end
46
+
47
+ def parse_arguments(arguments)
48
+ arguments.to_s.split(/\ -/).each_with_index.map do |argument, index|
49
+ argument = "-#{argument}" unless index.zero?
50
+ argument.match(/([^ ]+)\s*(.*)/m).captures.reject(&:blank?)
51
+ end.compact.flatten
52
+ end
35
53
  end
36
54
  end
37
55
  end
@@ -37,7 +37,7 @@ module DockerRailsProxy
37
37
  self.from_scratch = if docker_compose?
38
38
  %x(docker-compose ps | grep -c #{APP_NAME}).to_i.zero?
39
39
  elsif kubernetes?
40
- %x(kubectl get deploy -l 'app=#{APP_NAME}' -o name).empty?
40
+ %x(kubectl get deployment #{APP_NAME} -o name).empty?
41
41
  end
42
42
  end
43
43
 
@@ -77,10 +77,12 @@ module DockerRailsProxy
77
77
  end
78
78
 
79
79
  def fswatch_start
80
+ logger.debug "fswatch command: #{FSWATCH_CMD}"
80
81
  logger.info 'fswatch has been started'
82
+
81
83
  PTY.spawn(FSWATCH_CMD) do |stdout, stdin, pid|
82
84
  begin
83
- stdout.each { |path| sync_or_kill(path: path, pid: pid) }
85
+ stdout.each { |path| sync_or_kill(path: path.strip, pid: pid) }
84
86
  rescue Errno::EIO
85
87
  logger.error EIO_ERROR
86
88
  end
@@ -98,7 +100,9 @@ module DockerRailsProxy
98
100
  return if stopping?
99
101
 
100
102
  if branch_name == (branch = current_branch)
103
+ logger.debug("syncing #{path}")
101
104
  sync source: path
105
+ logger.debug("#{path} synced")
102
106
  else
103
107
  $stderr.puts %(
104
108
  `git checkout #{branch}` was detected, stopping fswatch
@@ -1,14 +1,17 @@
1
1
  module DockerRailsProxy
2
2
  class Rails < SyncBack
3
+ attr_reader :args
4
+
3
5
  def process
4
- command, *args = arguments
6
+ command, *@args = arguments
5
7
 
6
8
  case command
7
- when 'c', 'console' then console args
8
- when 'db', 'dbconsole' then db args
9
- when 'logs' then logs args
9
+ when 'c', 'console' then console
10
+ when 'db', 'dbconsole' then db
11
+ when 'logs' then logs
10
12
  when 'restart', 'touch' then restart
11
13
  when 'secrets' then secrets
14
+ when 'credentials' then credentials
12
15
  else
13
16
  execute "bin/rails #{command} #{args.join(' ')}", tty: true
14
17
  end
@@ -16,11 +19,11 @@ module DockerRailsProxy
16
19
 
17
20
  private
18
21
 
19
- def console(args)
22
+ def console
20
23
  execute "bin/rails c #{args.join(' ')}", tty: true, replace_process: true
21
24
  end
22
25
 
23
- def db(args)
26
+ def db
24
27
  container_id = get_docker_container_id(:mysql)
25
28
 
26
29
  if container_id.empty?
@@ -36,7 +39,7 @@ module DockerRailsProxy
36
39
  )
37
40
  end
38
41
 
39
- def logs(args)
42
+ def logs
40
43
  execute "tail -f log/#{args.first || 'development'}.log", replace_process: true
41
44
  end
42
45
 
@@ -47,5 +50,12 @@ module DockerRailsProxy
47
50
  def secrets
48
51
  execute "bash -c 'EDITOR=vim bin/rails secrets:edit'", tty: true
49
52
  end
53
+
54
+ def credentials
55
+ # Temporary solution to use credentials in Rails 5.2
56
+ # Future version will use the --environment argument instead
57
+ command = "RAILS_ENV=#{args.first} EDITOR=vim bin/rails credentials:edit"
58
+ execute "bash -c '#{command}'", tty: true
59
+ end
50
60
  end
51
61
  end
@@ -1,8 +1,7 @@
1
1
  module DockerRailsProxy
2
2
  class Rake < SyncBack
3
- def process
4
- command, *args = arguments
5
- execute "bin/rake #{command} #{args.join(' ')}"
3
+ builds ->(params:) do
4
+ Rails
6
5
  end
7
6
  end
8
7
  end
@@ -1,16 +1,16 @@
1
1
  module DockerRailsProxy
2
2
  module Callbacks
3
- INHERITABLE_CALLBACKS = %w(
3
+ INHERITABLE_CALLBACKS = %w[
4
4
  _before_initialize
5
5
  _after_initialize
6
6
  _validates
7
7
  _before_process
8
8
  _after_process
9
- ).freeze
9
+ ].freeze
10
10
 
11
- UNINHERITABLE_CALLBACKS = %w(
11
+ UNINHERITABLE_CALLBACKS = %w[
12
12
  _builds
13
- ).freeze
13
+ ].freeze
14
14
 
15
15
  def self.included(base)
16
16
  base.extend(ClassMethods)
@@ -50,12 +50,12 @@ module DockerRailsProxy
50
50
  def _make_lambda(callback:)
51
51
  case callback
52
52
  when Symbol
53
- -> (resource, *rest) { resource.send(callback, *rest) }
53
+ ->(resource, *rest) { resource.send(callback, *rest) }
54
54
  when ::Proc
55
55
  if callback.arity <= 0
56
- -> (resource) { resource.instance_exec(&callback) }
56
+ ->(resource) { resource.instance_exec(&callback) }
57
57
  else
58
- -> (resource, *rest) do
58
+ ->(resource, *rest) do
59
59
  if rest.empty?
60
60
  resource.instance_exec(resource, &callback)
61
61
  else
@@ -64,13 +64,13 @@ module DockerRailsProxy
64
64
  end
65
65
  end
66
66
  else
67
- -> (*) {}
67
+ ->(*) {}
68
68
  end
69
69
  end
70
70
 
71
71
  def _run_before_initialize_callbacks
72
72
  Array(_before_initialize).each do |callback|
73
- if (result = callback.call(self)).is_a? String
73
+ if (result = callback.call(self)).is_a?(String)
74
74
  $stderr.puts %(
75
75
  #{result}
76
76
  )
@@ -85,7 +85,7 @@ module DockerRailsProxy
85
85
 
86
86
  def _run_validation_callbacks(resource:)
87
87
  Array(_validates).each do |callback|
88
- if (result = callback.call(resource)).is_a? String
88
+ if (result = callback.call(resource)).is_a?(String)
89
89
  $stderr.puts %(
90
90
  #{result}
91
91
  )
@@ -12,7 +12,7 @@ module DockerRailsProxy
12
12
  def logger
13
13
  @logger ||= ::Logger.new(STDOUT).tap do |log|
14
14
  log.formatter = proc do |severity, datetime, progname, msg|
15
- "> #{datetime.strftime '%Y-%m-%d %T'} -- #{msg}\n"
15
+ "#{severity[0]}, [#{datetime.strftime('%Y-%m-%d %T')}] -- : #{msg}\n"
16
16
  end
17
17
  end
18
18
  end
@@ -1,3 +1,3 @@
1
1
  module DockerRailsProxy
2
- VERSION = '0.1.10'
2
+ VERSION = '0.1.15'
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_rails_proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jairo
8
8
  - Vázquez
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-06-27 00:00:00.000000000 Z
12
+ date: 2021-01-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Configures docker-compose and provides rails command helpers
15
15
  email:
@@ -60,7 +60,7 @@ homepage: https://github.com/jairovm/docker_rails_proxy
60
60
  licenses:
61
61
  - MIT
62
62
  metadata: {}
63
- post_install_message:
63
+ post_install_message:
64
64
  rdoc_options: []
65
65
  require_paths:
66
66
  - lib
@@ -75,9 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  requirements: []
78
- rubyforge_project:
79
- rubygems_version: 2.7.6
80
- signing_key:
78
+ rubygems_version: 3.0.3
79
+ signing_key:
81
80
  specification_version: 4
82
81
  summary: docker, docker-compose and rails wrapper
83
82
  test_files: []