producer-rails 0.0.1
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 +7 -0
- data/.gitignore +0 -0
- data/lib/producer/rails.rb +164 -0
- data/lib/producer/rails/version.rb +5 -0
- data/producer-rails.gemspec +19 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a4ffdb392f9f8bec2527ee9069c9784d39fded5b
|
4
|
+
data.tar.gz: ba6bff23838c42212ca604515947028c881e9571
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1c0fb325ea97d9a9bbe6f868956a895fd4e480d597468fbd45e48628e61a1579986249bdf30dfd819d61f309243c3472fe6d9405cc547f781665f9d79e7d9939
|
7
|
+
data.tar.gz: 8ecdcff66fd2d4693d6093a8ced55fb3856e2d10c38a1791c6787ec3a6e44dd1fe44506b99346f33fb0b708d9ba96500baeeace180c939d1ffa2013e9e6477f0
|
data/.gitignore
ADDED
File without changes
|
@@ -0,0 +1,164 @@
|
|
1
|
+
module Producer
|
2
|
+
module Rails
|
3
|
+
require 'producer/stdlib'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def define_macro(name, &block)
|
8
|
+
::Producer::Core::Recipe.define_macro(name, block)
|
9
|
+
end
|
10
|
+
|
11
|
+
def define_test(name, &block)
|
12
|
+
::Producer::Core::Condition.define_test(name, block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
define_macro :deploy do
|
17
|
+
app_path = get :app_path
|
18
|
+
$app_path = app_path
|
19
|
+
|
20
|
+
if ENV.key? 'DEPLOY_INIT'
|
21
|
+
ensure_dir app_path, 0701
|
22
|
+
git_clone get(:repository), app_path
|
23
|
+
app_init app_path, get(:app_mkdir)
|
24
|
+
bundle_install app_path
|
25
|
+
db_config app_path
|
26
|
+
db_init app_path
|
27
|
+
secrets_init app_path
|
28
|
+
www_config app_path
|
29
|
+
else
|
30
|
+
git_update app_path
|
31
|
+
bundle_install app_path
|
32
|
+
db_migrate app_path
|
33
|
+
end
|
34
|
+
|
35
|
+
assets_update app_path
|
36
|
+
|
37
|
+
|
38
|
+
www_pid_path = get :www_pid_path
|
39
|
+
queue_workers = get :queue_workers
|
40
|
+
|
41
|
+
if ENV.key? 'DEPLOY_INIT'
|
42
|
+
www_start app_path, www_pid_path
|
43
|
+
app_start app_path, queue_workers
|
44
|
+
else
|
45
|
+
app_stop
|
46
|
+
www_stop app_path, www_pid_path
|
47
|
+
www_start app_path, www_pid_path
|
48
|
+
app_start app_path, queue_workers
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
define_test :bundle_installed? do |gemfile|
|
53
|
+
no_sh "bundle check #{gemfile}"
|
54
|
+
end
|
55
|
+
|
56
|
+
define_macro :bundle_install do |path|
|
57
|
+
gemfile = "--gemfile #{path}/Gemfile"
|
58
|
+
|
59
|
+
condition { bundle_installed? gemfile }
|
60
|
+
|
61
|
+
sh "bundle install --without development test #{gemfile}"
|
62
|
+
end
|
63
|
+
|
64
|
+
define_macro :app_init do |path, dirs: []|
|
65
|
+
directories = (%w[tmp tmp/run] + dirs).map do |e|
|
66
|
+
File.join(path, e)
|
67
|
+
end
|
68
|
+
|
69
|
+
condition { no_dir? directories.first }
|
70
|
+
|
71
|
+
directories.each { |e| mkdir e, 0700 }
|
72
|
+
sh "cd #{path} && chmod 701 tmp tmp/run"
|
73
|
+
end
|
74
|
+
|
75
|
+
define_macro :db_config do |path|
|
76
|
+
path = "#{path}/config/database.yml"
|
77
|
+
conf = <<-eoh
|
78
|
+
default: &default
|
79
|
+
adapter: postgresql
|
80
|
+
encoding: unicode
|
81
|
+
pool: 5
|
82
|
+
|
83
|
+
production:
|
84
|
+
<<: *default
|
85
|
+
database: #{target}
|
86
|
+
eoh
|
87
|
+
|
88
|
+
condition { no_file? path }
|
89
|
+
|
90
|
+
file_write path, conf
|
91
|
+
end
|
92
|
+
|
93
|
+
define_macro :db_init do |path|
|
94
|
+
condition { no_sh 'psql -l | grep -E "^ +%s"' % target }
|
95
|
+
|
96
|
+
sh "cd #{path} && bundle exec rake db:create db:migrate"
|
97
|
+
end
|
98
|
+
|
99
|
+
define_macro :db_migrate do |path|
|
100
|
+
condition { sh "cd #{path} && bundle exec rake db:migrate:status | grep -E '^ +down'" }
|
101
|
+
|
102
|
+
sh "cd #{path} && bundle exec rake db:migrate"
|
103
|
+
end
|
104
|
+
|
105
|
+
define_macro :secrets_init do |path|
|
106
|
+
path = "#{path}/config/secrets.yml"
|
107
|
+
conf = <<-eoh
|
108
|
+
production:
|
109
|
+
secret_key_base: #{SecureRandom.hex(64)}
|
110
|
+
eoh
|
111
|
+
|
112
|
+
condition { no_file? path }
|
113
|
+
|
114
|
+
file_write path, conf
|
115
|
+
end
|
116
|
+
|
117
|
+
define_macro :www_config do |path|
|
118
|
+
www_config_path = File.join(path, get(:www_config_path))
|
119
|
+
conf = <<-eoh
|
120
|
+
worker_processes #{get :www_workers}
|
121
|
+
preload_app false
|
122
|
+
pid '#{get :www_pid_path}'
|
123
|
+
listen "\#{ENV['HOME']}/#{path}/#{get :www_sock_path}"
|
124
|
+
eoh
|
125
|
+
|
126
|
+
condition { no_file_contains www_config_path, conf }
|
127
|
+
|
128
|
+
file_write www_config_path, conf
|
129
|
+
end
|
130
|
+
|
131
|
+
define_macro :assets_update do |path|
|
132
|
+
sh "cd #{path} && bundle exec rake assets:precompile"
|
133
|
+
sh "cd #{path} && chmod 711 public public/assets"
|
134
|
+
sh "cd #{path} && find public/assets -type d -exec chmod 711 {} \\;"
|
135
|
+
sh "cd #{path} && find public/assets -type f -exec chmod 644 {} \\;"
|
136
|
+
end
|
137
|
+
|
138
|
+
define_macro :app_start do |app_path, queue_workers|
|
139
|
+
condition { no_sh 'tmux has-session -t app' }
|
140
|
+
|
141
|
+
sh "cd #{app_path} && tmux new -d -s app 'foreman start -c queue=1,worker=#{queue_workers}; zsh'"
|
142
|
+
end
|
143
|
+
|
144
|
+
define_macro :app_stop do
|
145
|
+
sh 'tmux kill-session -t app'
|
146
|
+
end
|
147
|
+
|
148
|
+
define_macro :www_start do |app_path, www_pid_path|
|
149
|
+
condition { no_file? [app_path, www_pid_path].join('/') }
|
150
|
+
|
151
|
+
sh "cd #{app_path} && bundle exec unicorn -c config/unicorn.rb -D"
|
152
|
+
end
|
153
|
+
|
154
|
+
define_macro :www_reload do |app_path, www_pid_path|
|
155
|
+
sh "kill -HUP $(cat #{app_path}/#{www_pid_path})"
|
156
|
+
end
|
157
|
+
|
158
|
+
define_macro :www_stop do |app_path, www_pid_path|
|
159
|
+
condition { file? [app_path, www_pid_path].join('/') }
|
160
|
+
|
161
|
+
sh "kill -QUIT $(cat #{app_path}/#{www_pid_path}); sleep 1"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path('../lib/producer/rails/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'producer-rails'
|
5
|
+
s.version = Producer::Rails::VERSION.dup
|
6
|
+
s.summary = 'producer rails addon'
|
7
|
+
s.description = <<-eoh.gsub(/^ +/, '')
|
8
|
+
Rails specific macros for producer (gem: producer-core).
|
9
|
+
eoh
|
10
|
+
s.homepage = 'https://rubygems.org/gems/producer-rails'
|
11
|
+
|
12
|
+
s.authors = 'Thibault Jouan'
|
13
|
+
s.email = 'tj@a13.fr'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split $/
|
16
|
+
|
17
|
+
s.add_dependency 'producer-core', '~> 0.3', '>= 0.3.5'
|
18
|
+
s.add_dependency 'producer-stdlib', '~> 0.0', '>= 0.0.5'
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: producer-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thibault Jouan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: producer-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.3'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.3.5
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.3'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.3.5
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: producer-stdlib
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.0.5
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.0.5
|
53
|
+
description: |
|
54
|
+
Rails specific macros for producer (gem: producer-core).
|
55
|
+
email: tj@a13.fr
|
56
|
+
executables: []
|
57
|
+
extensions: []
|
58
|
+
extra_rdoc_files: []
|
59
|
+
files:
|
60
|
+
- ".gitignore"
|
61
|
+
- lib/producer/rails.rb
|
62
|
+
- lib/producer/rails/version.rb
|
63
|
+
- producer-rails.gemspec
|
64
|
+
homepage: https://rubygems.org/gems/producer-rails
|
65
|
+
licenses: []
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.2.2
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: producer rails addon
|
87
|
+
test_files: []
|
88
|
+
has_rdoc:
|