trireme 0.0.1 → 0.2.0

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trireme/app_builder.rb +17 -7
  3. data/lib/trireme/generators/app_generator.rb +1 -2
  4. data/lib/trireme/templates/app/helpers/utility_helper.rb +3 -1
  5. data/lib/trireme/templates/config/deploy.rb.erb +55 -41
  6. data/lib/trireme/templates/config/deploy/production.rb.erb +15 -0
  7. data/lib/trireme/templates/config/deploy/staging.rb.erb +16 -0
  8. data/lib/trireme/templates/{config/recipes → lib/mina}/check.rb +1 -4
  9. data/lib/trireme/templates/lib/mina/db.rb.erb +10 -0
  10. data/lib/trireme/templates/lib/mina/defaults.rb +35 -0
  11. data/lib/trireme/templates/lib/mina/irc.rb.erb +22 -0
  12. data/lib/trireme/templates/lib/mina/log.rb.erb +21 -0
  13. data/lib/trireme/templates/lib/mina/logrotate.rb +7 -0
  14. data/lib/trireme/templates/lib/mina/nginx.rb +23 -0
  15. data/lib/trireme/templates/lib/mina/postgresql.rb +37 -0
  16. data/lib/trireme/templates/{config/recipes → lib/mina}/templates/logrotate.erb +1 -1
  17. data/lib/trireme/templates/{config/recipes → lib/mina}/templates/nginx_unicorn.erb +8 -8
  18. data/lib/trireme/templates/{config/recipes → lib/mina}/templates/postgresql.yml.erb +0 -0
  19. data/lib/trireme/templates/{config/recipes → lib/mina}/templates/unicorn.rb.erb +2 -2
  20. data/lib/trireme/templates/{config/recipes → lib/mina}/templates/unicorn_init.erb +2 -2
  21. data/lib/trireme/templates/lib/mina/unicorn.rb +21 -0
  22. data/lib/trireme/templates/lib/mina/utility.rb +44 -0
  23. data/lib/trireme/templates/lib/templates/erb/scaffold/edit.html.erb +3 -3
  24. data/lib/trireme/templates/lib/templates/erb/scaffold/index.html.erb +7 -3
  25. data/lib/trireme/templates/lib/templates/erb/scaffold/new.html.erb +2 -2
  26. data/lib/trireme/templates/lib/templates/erb/scaffold/show.html.erb +2 -2
  27. data/lib/trireme/version.rb +1 -1
  28. metadata +19 -18
  29. data/lib/trireme/templates/Capfile +0 -4
  30. data/lib/trireme/templates/config/deploy/production.rb +0 -17
  31. data/lib/trireme/templates/config/deploy/staging.rb +0 -8
  32. data/lib/trireme/templates/config/recipes/base.rb +0 -8
  33. data/lib/trireme/templates/config/recipes/log.rb +0 -6
  34. data/lib/trireme/templates/config/recipes/logrotate.rb +0 -8
  35. data/lib/trireme/templates/config/recipes/nginx.rb +0 -17
  36. data/lib/trireme/templates/config/recipes/postgresql.rb +0 -32
  37. data/lib/trireme/templates/config/recipes/scripts/sql_functions.sql +0 -23
  38. data/lib/trireme/templates/config/recipes/unicorn.rb +0 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9a8e50b134b60477af20a52ac807788e28701d1
4
- data.tar.gz: 7c073f1152a8c2c4d66f27919d602256f045f4ba
3
+ metadata.gz: 61b2fc070bbe41b72043ad7659dc30e983b51e5a
4
+ data.tar.gz: e0fd5ff48fd6b38f1101137430628dfef3f0ac50
5
5
  SHA512:
6
- metadata.gz: b26baa4e8e6d349eccf0482d7b67d30599f039ea27c1a5acb1118bd048c3c80c23c6fc13d064c58e6b2c4d76c4c79f91ecd3714b6b0ad022e8e6159c88be3acf
7
- data.tar.gz: 277fb0c6aefcff4e2eeb8a6aa25d78f9fbab19a64d7483bae6bef856d0e37952453452275185326dc0684b8db4d59c8b4f75d43237251c629950ba2aec8461e1
6
+ metadata.gz: 12bdbb5ac2a2e0a8f2b1dc3be7a92b46f7e8b988d38f667681dabaa0b33d8e439849091668647e7d3d62f0ef70c48680378e38a25fb4a3c655d6ad1bf899993a
7
+ data.tar.gz: 02df4ff322b341f89be889740b344b98e9ead096b98fcc6a82bd4ab6ea29da052e0ff9f56660f614436e58a6521900af24ab7bd83a44cf70d8373f32be1da5e6
@@ -5,7 +5,7 @@ module Trireme
5
5
  include Trireme::Actions
6
6
 
7
7
  def add_additional_gems
8
- if yes? "Add carrierwave for file uploading?"
8
+ if config_settings[:gems].include?('carrierwave') || yes?("Add carrierwave for file uploading?")
9
9
  @generator.gem 'carrierwave'
10
10
  @generator.gem 'mini_magick'
11
11
  end
@@ -126,7 +126,7 @@ module Trireme
126
126
  "config.action_mailer_delivery_method = :smtp\n\tconfig.action_mailer.smtp_settings = #{format_config(config_settings[:action_mailer][:smtp_settings])}"
127
127
  end
128
128
 
129
- def setup_capistrano
129
+ def setup_deploy
130
130
  if @domain_base && @server_ip
131
131
  opts = { domain_base: @domain_base, server_ip: @server_ip, force: true }
132
132
  else
@@ -134,10 +134,20 @@ module Trireme
134
134
  opts[:server_ip] = ask("Server IP:")
135
135
  opts[:force] = true
136
136
  end
137
- template "config/deploy.rb.erb", "config/deploy.rb", opts
137
+ puts @config.to_yaml
138
+ deploy_opts = opts.merge({config_settings: config_settings})
139
+ template "config/deploy.rb.erb", "config/deploy.rb", deploy_opts
138
140
  directory "config/deploy"
139
- copy_file "Capfile", "Capfile"
140
- directory "config/recipes"
141
+ %w[staging.rb production.rb].each { |f| template "config/deploy/#{f}.erb", "config/deploy/#{f}", deploy_opts }
142
+
143
+ directory "lib/mina"
144
+
145
+ Dir["#{File.expand_path('../../trireme/templates/lib/mina/', __FILE__)}/*.erb"].each do |file|
146
+ file = file.split('/').last
147
+ template "lib/mina/#{file}", "lib/mina/#{file.gsub('.erb', '')}", deploy_opts
148
+ puts "lib/mina/#{file}", "lib/mina/#{file.gsub('.erb', '')}"
149
+ end
150
+ run 'rm lib/mina/*.erb'
141
151
  end
142
152
 
143
153
  def setup_console
@@ -146,7 +156,7 @@ module Trireme
146
156
 
147
157
  def setup_devise
148
158
  if config_settings[:devise][:include] || yes?("Add Devise?")
149
- devise_model = ask("Devise model (default: #{config_settings[:devise][:model]}):").underscore
159
+ devise_model = ask("Devise model (default: #{config_settings[:devise][:model]}):").underscore unless config_settings[:devise][:force_model]
150
160
  devise_model = config_settings[:devise][:model] if devise_model.blank?
151
161
  @generator.gem 'devise'
152
162
  run 'bundle install'
@@ -170,7 +180,7 @@ module Trireme
170
180
  if config_settings[:exception_notification][:irc]
171
181
  config_settings[:exception_notification][:irc][:prefix] = "[#{app_name.titleize} Production]"
172
182
  en_config << ",\n\t\t" if en_config[/}\Z/]
173
- en_config << ":irc => #{format_config(config_settings[:exception_notification][:irc], 2)}"
183
+ en_config << ":irc => #{format_config(config_settings[:exception_notification][:irc].merge(config_settings[:irc]), 2)}"
174
184
  end
175
185
  configure_environment "production", en_config
176
186
  end
@@ -3,7 +3,6 @@ require 'rails/generators/rails/app/app_generator'
3
3
 
4
4
  module Trireme
5
5
  class AppGenerator < Rails::Generators::AppGenerator
6
- class_option :database, type: :string, aliases: '-d', default: 'sqlite3', desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
7
6
  class_option :config_file, type: :string, aliases: '-c', desc: "Include yaml configuration file"
8
7
 
9
8
  def finish_template
@@ -147,7 +146,7 @@ module Trireme
147
146
  build :get_server_options
148
147
 
149
148
  # Add deploy configuration and recipes
150
- build :setup_capistrano
149
+ build :setup_deploy
151
150
  end
152
151
 
153
152
  def setup_git
@@ -15,14 +15,16 @@ module UtilityHelper
15
15
  html_tag << '<i class="fa fa-circle fa-stack-2x"></i>'
16
16
  html_tag << "<i class=\"fa fa-#{name} fa-stack-1x fa-inverse\"></i>"
17
17
  html_tag << '</span>'
18
+ html_tag << '</div>' if opts[:wrapper]
18
19
  else
19
20
  html_tag << "<i class=\"fa fa-#{name}"
20
21
  html_tag << " #{opts[:additional]}" if opts.has_key? :additional
21
22
  html_tag << " fa-border" if opts[:border]
22
23
  html_tag << " fa-#{opts[:size]}" if opts[:size]
23
24
  html_tag << '"></i>'
24
- html_tag << '</div>' if opts[:wrapper]
25
25
  end
26
+ html_tag << " #{opts[:text]}" if opts[:text]
27
+ html_tag << '</div>' if opts[:wrapper]
26
28
  html_tag.html_safe
27
29
  end
28
30
 
@@ -1,41 +1,55 @@
1
- # Set these values for the particular application
2
- set :domain_base, "<%= config[:domain_base] %>"
3
- set :server_ip, "<%= config[:server_ip] %>"
4
- set :application, "<%= app_name %>"
5
-
6
- # Possibly set these values
7
- set :repository, "git@git.cliftonlabs.com:web/#{application}"
8
- set :user, "deployer"
9
-
10
- set :stages, %w(staging production)
11
- set :default_stage, "staging"
12
-
13
- require "capistrano/ext/multistage"
14
- require "bundler/capistrano"
15
-
16
- load "config/recipes/base"
17
- load "config/recipes/nginx"
18
- load "config/recipes/unicorn"
19
- load "config/recipes/postgresql"
20
- load "config/recipes/check"
21
- load "config/recipes/logrotate"
22
- load "config/recipes/log"
23
-
24
- server server_ip, :web, :app, :db, primary: true
25
-
26
- set :shared_children, shared_children + %w{public/uploads}
27
-
28
- set :deploy_via, :remote_cache
29
- set :use_sudo, false
30
- set :deploy_to, defer { "/home/#{user}/#{application}/#{stage}/" }
31
-
32
- set :default_environment, {
33
- 'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
34
- }
35
-
36
- set :scm, "git"
37
-
38
- default_run_options[:pty] = true
39
- ssh_options[:forward_agent] = true
40
-
41
- after "deploy", "deploy:cleanup" # keep only the last 5 releases
1
+ $:.unshift './lib'
2
+
3
+ require 'mina/bundler'
4
+ require 'mina/rails'
5
+ require 'mina/git'
6
+
7
+ require 'mina/defaults'
8
+ require 'mina/utility'
9
+ require 'mina/nginx'
10
+ require 'mina/unicorn'
11
+ require 'mina/postgresql'
12
+ require 'mina/logrotate'
13
+ require 'mina/log'
14
+ require 'mina/check'
15
+ require 'mina/irc'
16
+ require 'mina/db'
17
+
18
+ # Load environments from config/deploy
19
+ Dir['config/deploy/*.rb'].each { |f| load f }
20
+
21
+ ###########################################################################
22
+ # Common settings for all servers
23
+ ###########################################################################
24
+
25
+ set :application, "<%= app_name %>"
26
+ set :application_name, "<%= app_name.titleize %>"
27
+ set :domain_name, "<%= config[:domain_base] %>"
28
+ set :keep_releases, 5
29
+ set :repository, "<%= config[:config_settings][:git][:url] %>#{app_name}.git"
30
+ set :default_server, 'staging'
31
+
32
+ ###########################################################################
33
+
34
+ set :server, ENV['to'] || default_server
35
+ invoke :"env:#{server}"
36
+
37
+ desc "Deploys the current version to the server."
38
+ task :deploy => :environment do
39
+ deploy do
40
+ invoke :'check:revision'
41
+ invoke :'git:clone'
42
+ invoke :'deploy:link_shared_paths'
43
+ invoke :'bundle:install'
44
+ invoke :'rails:db_migrate'
45
+ invoke :'rails:assets_precompile'
46
+
47
+ to :launch do
48
+ invoke :'unicorn:stop'
49
+ queue %{sleep 3}
50
+ invoke :'unicorn:start'
51
+ end
52
+
53
+ <%= "invoke :'irc:announce_deploy'" if config[:config_settings][:mina][:irc] %>
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ namespace :env do
2
+ task :production => [:environment] do
3
+ set :server_ip, '<%= config[:server_ip] || '123.123.123.123' %>'
4
+ set :domain, server_ip
5
+ set :deploy_server, 'production'
6
+ set :rails_env, 'production'
7
+ set :branch, 'master'
8
+ set :rewrite_www, true
9
+ set :include_ssl, false
10
+ set :default_host, true
11
+ set :unicorn_workers, 1
12
+
13
+ invoke :defaults
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ namespace :env do
2
+ task :staging => [:environment] do
3
+ set :server_ip, '<%= config[:server_ip] || '123.123.123.123' %>'
4
+ set :domain, server_ip
5
+ set :deploy_server, 'staging'
6
+ set :rails_env, 'staging'
7
+ set :branch, 'staging'
8
+ set :rewrite_www, false
9
+ set :include_ssl, false
10
+ set :default_host, false
11
+ set :unicorn_workers, 1
12
+
13
+ invoke :defaults
14
+ set :domain_name, "demo.#{domain_name}"
15
+ end
16
+ end
@@ -1,6 +1,6 @@
1
1
  namespace :check do
2
2
  desc "Make sure local git is in sync with remote."
3
- task :revision, roles: :web do
3
+ task :revision do
4
4
  current_repository = "origin"
5
5
  unless (`git rev-parse HEAD` == `git rev-parse #{current_repository}/#{branch}`)
6
6
  puts "WARNING: HEAD is not the same as #{current_repository}/#{branch}"
@@ -8,7 +8,4 @@ namespace :check do
8
8
  exit
9
9
  end
10
10
  end
11
- before "deploy", "check:revision"
12
- before "deploy:migrations", "check:revision"
13
- before "deploy:cold", "check:revision"
14
11
  end
@@ -0,0 +1,10 @@
1
+ namespace :db do
2
+ desc "Run db:seed"
3
+ task :seed do
4
+ queue %{cd #{deploy_to}/#{current_path}}
5
+ queue %{bundle exec rake RAILS_ENV=#{rails_env} db:seed}
6
+ <% if config[:config_settings][:mina][:irc] %>
7
+ invoke :'irc:announce_seed'
8
+ <% end -%>
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ task :defaults do
2
+ set_default :user, 'deployer'
3
+ set_default :group, user
4
+ set_default :port, '22'
5
+ set_default :ssh_options, '-t'
6
+ set_default :forward_agent, true
7
+ set_default :term_mode, :nil
8
+ set_default :rails_env, 'staging'
9
+ set_default :shared_paths, ['tmp', 'log', 'public/uploads', 'config/database.yml']
10
+ set_default :branch, 'staging'
11
+ set_default :deploy_to, "/home/#{user}/#{application}/#{deploy_server}"
12
+
13
+ set_default :sockets_path, "#{deploy_to}/#{shared_path}/tmp/sockets"
14
+ set_default :pids_path, "#{deploy_to}/#{shared_path}/tmp/pids"
15
+ set_default :logs_path, "#{deploy_to}/#{shared_path}/log"
16
+ set_default :templates_path, "lib/mina/templates"
17
+ set_default :config_path, "#{deploy_to}/#{shared_path}/config"
18
+
19
+ set_default :unicorn_socket, "#{sockets_path}/unicorn.sock"
20
+ set_default :unicorn_pid, "#{pids_path}/unicorn.pid"
21
+ set_default :unicorn_config, "#{config_path}/unicorn.rb"
22
+ set_default :unicorn_workers, 1
23
+ set_default :unicorn_log, "#{logs_path}/unicorn.log"
24
+ set_default :unicorn_user, user
25
+ set_default :unicorn_script, "/etc/init.d/unicorn_#{application}_#{deploy_server}"
26
+
27
+ set_default :nginx_config, "#{nginx_path}/sites-enabled/#{application}_#{deploy_server}"
28
+ set_default :nginx_log_path, "#{deploy_to}/#{shared_path}/log/nginx"
29
+ set_default :nginx_server_name, domain || server_ip
30
+
31
+ set_default :postgresql_host, "localhost"
32
+ set_default :postgresql_user, application
33
+ set_default :postgresql_database, "#{application}_#{deploy_server}"
34
+ set_default :postgresql_pid, "/var/run/postgresql/9.1-main.pid"
35
+ end
@@ -0,0 +1,22 @@
1
+ <% if config[:config_settings][:mina][:irc] %>
2
+ require 'carrier-pigeon'
3
+
4
+ namespace :irc do
5
+ desc "Announce deploy to irc"
6
+ task :announce_deploy do
7
+ send_irc_message "#{ENV['USER'].capitalize} is deploying #{application_name || application} to #{server}"
8
+ end
9
+
10
+ task :announce_seed do
11
+ send_irc_message "#{ENV['USER'].capitalize} is seeding the database for #{application_name || application} #{server}"
12
+ end
13
+ end
14
+
15
+ def send_irc_message(message)
16
+ CarrierPigeon.send(
17
+ :uri => "irc://<%= config[:config_settings][:mina][:irc][:nick] %><%= ":#{config[:config_settings][:irc][:password] if config[:config_settings][:irc][:password]}" %>@<%= config[:config_settings][:irc][:domain] %>:<%= config[:config_settings][:irc][:port] %>/<%= config[:config_settings][:irc][:channel] %>",
18
+ :message => message,
19
+ :ssl => <%= config[:config_settings][:irc][:ssl] %>
20
+ )
21
+ end
22
+ <% end -%>
@@ -0,0 +1,21 @@
1
+ namespace :log do
2
+ desc "View tail of rails log"
3
+ task :rails do
4
+ queue "tail #{logs_path}/#{rails_env}.log -n <%= config[:config_settings][:mina][:log][:tail_length] %>"
5
+ end
6
+
7
+ desc "View tail of unicorn log"
8
+ task :unicorn do
9
+ queue "tail #{unicorn_log} -n <%= config[:config_settings][:mina][:log][:tail_length] %>"
10
+ end
11
+
12
+ desc "View tail of nginx error log"
13
+ task :nginx do
14
+ queue "tail /var/log/nginx/error.log -n <%= config[:config_settings][:mina][:log][:tail_length] %>"
15
+ end
16
+
17
+ desc "View tail of nginx access log"
18
+ task :nginx_access do
19
+ queue "tail /var/log/nginx/access.log -n <%= config[:config_settings][:mina][:log][:tail_length] %>"
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ namespace :logrotate do
2
+ desc "Setup logrotate for all log files in log directory"
3
+ task :setup do
4
+ template "logrotate.erb", "/etc/logrotate.d/#{application}_#{stage}", :tee, :sudo
5
+ end
6
+ after "deploy:setup", "logrotate:setup"
7
+ end
@@ -0,0 +1,23 @@
1
+ namespace :nginx do
2
+ desc "Setup nginx configuration for this application"
3
+ task :setup do
4
+ queue 'echo "-----> Creating nginx config"'
5
+ template "nginx_unicorn.erb", "/etc/nginx/sites-enabled/#{application}_#{deploy_server}", :tee, :sudo
6
+ queue 'echo "-----> Deleting nginx default site"' if verbose_mode?
7
+ queue echo_cmd "sudo rm -f /etc/nginx/sites-enabled/default"
8
+ invoke :'nginx:restart'
9
+ end
10
+
11
+ task :remove do
12
+ queue 'echo "-----> Deleting nginx config"'
13
+ queue "sudo rm -f /etc/nginx/sites-enabled/#{application}_#{deploy_server}"
14
+ invoke :'nginx:restart'
15
+ end
16
+
17
+ %w[start stop restart].each do |command|
18
+ desc "#{command} nginx"
19
+ task command do
20
+ queue echo_cmd "sudo service nginx #{command}"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ require 'highline/import'
2
+
3
+ namespace :postgresql do
4
+ desc "Generate the database.yml configuration file"
5
+ task :setup do
6
+ get_postgresql_password
7
+ invoke :'postgresql:create_user'
8
+ invoke :'postgresql:create_database'
9
+ template "postgresql.yml.erb", "#{config_path}/database.yml"
10
+ end
11
+
12
+ desc "Create a user for this application."
13
+ task :create_user do
14
+ get_postgresql_password
15
+ queue %{sudo -u postgres psql -c "create user \\"#{postgresql_user}\\" with password '#{postgresql_password}';"; true}
16
+ end
17
+
18
+ desc "Create a database for this application."
19
+ task :create_database do
20
+ queue %Q{sudo -u postgres psql -c "create database \\"#{postgresql_database}\\" owner \\"#{postgresql_user}\\";"; true}
21
+ end
22
+
23
+ desc "Symlink the database.yml file into latest release"
24
+ task :symlink do
25
+ run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
26
+ end
27
+ after "deploy:finalize_update", "postgresql:symlink"
28
+ end
29
+
30
+ def get_postgresql_password
31
+ if !postgresql_password
32
+ pw = ask "Postgresql password: " do |p|
33
+ p.echo = '*'
34
+ end
35
+ set :postgresql_password, pw
36
+ end
37
+ end
@@ -1,4 +1,4 @@
1
- /home/<%= user %>/<%= application %>/<%= stage %>/shared/log/*.log {
1
+ /home/<%= user %>/<%= application %>/<%= deploy_server %>/shared/log/*.log {
2
2
  weekly
3
3
  missingok
4
4
  rotate 52
@@ -1,5 +1,5 @@
1
- upstream unicorn_<%= "#{application}_#{rails_env}" %> {
2
- server unix:/tmp/unicorn.<%= "#{application}_#{rails_env}" %>.sock fail_timeout=0;
1
+ upstream unicorn_<%= "#{application}_#{deploy_server}" %> {
2
+ server unix:/tmp/unicorn.<%= "#{application}_#{deploy_server}" %>.sock fail_timeout=0;
3
3
  }
4
4
 
5
5
  <% if rewrite_www %>
@@ -16,9 +16,9 @@ server {
16
16
  # Server configuration #
17
17
  ############################
18
18
  server {
19
- listen 80<%= " default_server" if (defined? default_host) && default_host %>;
20
- server_name <%= domain_name %>;
21
- root /home/<%= user %>/<%= application %>/<%= stage %>/current/public;
19
+ listen 80<%= " default_server" if default_host %>;
20
+ server_name <%= domain_name %><%= " #{server_ip}" if default_host %>;
21
+ root /home/<%= user %>/<%= application %>/<%= deploy_server %>/current/public;
22
22
 
23
23
  location ^~ /assets/ {
24
24
  gzip_static on;
@@ -31,7 +31,7 @@ server {
31
31
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
32
32
  proxy_set_header Host $http_host;
33
33
  proxy_redirect off;
34
- proxy_pass http://unicorn_<%= application %>_<%= stage %>;
34
+ proxy_pass http://unicorn_<%= application %>_<%= deploy_server %>;
35
35
  }
36
36
 
37
37
  error_page 500 502 503 504 /500.html;
@@ -46,7 +46,7 @@ server {
46
46
  ssl on;
47
47
  ssl_certificate /path/to/certificate/certificate.combined.crt;
48
48
  ssl_certificate_key /path/to/key/server.key;
49
- root /home/<%= user %>/apps/<%= application %>/<%= stage %>/current/public;
49
+ root /home/<%= user %>/apps/<%= application %>/<%= deploy_server %>/current/public;
50
50
 
51
51
  location ^~ /assets/ {
52
52
  gzip_static on;
@@ -59,7 +59,7 @@ server {
59
59
  proxy_set_header X-Forwarded-Proto $scheme;
60
60
  proxy_set_header Host $http_host;
61
61
  proxy_redirect off;
62
- proxy_pass http://unicorn_<%= application %>_<%= stage %>;
62
+ proxy_pass http://unicorn_<%= application %>_<%= deploy_server %>;
63
63
  }
64
64
 
65
65
  error_page 500 502 503 504 /500.html;
@@ -1,10 +1,10 @@
1
- working_directory "<%= current_path %>"
1
+ working_directory "<%= deploy_to %>/<%= current_path %>"
2
2
  pid "<%= unicorn_pid %>"
3
3
  stderr_path "<%= unicorn_log %>"
4
4
  stdout_path "<%= unicorn_log %>"
5
5
  preload_app true
6
6
 
7
- listen "/tmp/unicorn.<%= "#{application}_#{stage}" %>.sock"
7
+ listen "/tmp/unicorn.<%= "#{application}_#{deploy_server}" %>.sock"
8
8
  worker_processes <%= unicorn_workers %>
9
9
  timeout 30
10
10
 
@@ -12,9 +12,9 @@ set -e
12
12
 
13
13
  # Feel free to change any of the following variables for your app:
14
14
  TIMEOUT=${TIMEOUT-60}
15
- APP_ROOT=<%= current_path %>
15
+ APP_ROOT=<%= deploy_to %>/current
16
16
  PID=<%= unicorn_pid %>
17
- CMD="cd <%= current_path %>; bundle exec unicorn -D -c <%= unicorn_config %> -E <%= rails_env %>"
17
+ CMD="cd $APP_ROOT; bundle exec unicorn -D -c <%= unicorn_config %> -E <%= rails_env %>"
18
18
  AS_USER=<%= unicorn_user %>
19
19
  set -u
20
20
 
@@ -0,0 +1,21 @@
1
+ namespace :unicorn do
2
+ desc "Setup Unicorn initializer and app configuration"
3
+ task :setup do
4
+ queue 'echo "-----> Creating unicorn configuration file"'
5
+ queue "mkdir -p #{shared_path}/config"
6
+ template "unicorn.rb.erb", unicorn_config
7
+
8
+ queue 'echo "-----> Creating unicorn init script"'
9
+ template "unicorn_init.erb", unicorn_script, :tee, :sudo
10
+ queue echo_cmd "sudo chmod +x #{unicorn_script}"
11
+ queue echo_cmd "sudo update-rc.d -f unicorn_#{application}_#{deploy_server} defaults"
12
+ end
13
+
14
+ %w[start stop restart].each do |command|
15
+ desc "#{command.capitalize} unicorn"
16
+ task command do
17
+ queue %{echo "-----> #{command.capitalize} Unicorn"}
18
+ queue echo_cmd "/etc/init.d/unicorn_#{application}_#{deploy_server} #{command}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ task :setup do
2
+ invoke :create_extra_paths
3
+ invoke :'postgresql:setup'
4
+ invoke :'nginx:setup'
5
+ invoke :'unicorn:setup'
6
+ invoke :'logrotate:setup'
7
+ end
8
+
9
+ task :echo_config do
10
+ queue %{echo #{rails_env}}
11
+ queue %{echo #{deploy_to}}
12
+ queue %{echo #{shared_path}}
13
+ queue %{echo #{shared_paths.first}}
14
+ end
15
+
16
+ task :create_extra_paths do
17
+ queue 'echo "-----> Create configs path"'
18
+ queue echo_cmd "mkdir -p #{config_path}"
19
+
20
+ queue 'echo "-----> Create shared paths"'
21
+ shared_dirs = shared_paths.map { |file| "#{deploy_to}/#{shared_path}/#{file}" }.uniq
22
+ cmds = shared_dirs.map do |dir|
23
+ queue echo_cmd %{mkdir -p "#{dir}"}
24
+ end
25
+
26
+ queue 'echo "-----> Create PID and Sockets paths"'
27
+ cmds = [pids_path, sockets_path].map do |path|
28
+ queue echo_cmd %{mkdir -p #{path}}
29
+ end
30
+ end
31
+
32
+ def template(from, to, *opts)
33
+ queue %{echo "-----> Creating file at #{to} using template #{from}"}
34
+ if opts.include? :tee
35
+ command = ''
36
+ command << 'sudo ' if opts.include? :sudo
37
+ command << %{tee #{to} <<'zzENDOFFILEzz' > /dev/null\n}
38
+ command << %{#{erb("#{templates_path}/#{from}")}}
39
+ command << %{\nzzENDOFFILEzz}
40
+ else
41
+ command = %{echo '#{erb("#{templates_path}/#{from}")}' > #{to}}
42
+ end
43
+ queue echo_cmd command
44
+ end
@@ -1,6 +1,6 @@
1
- <h1>Editing <%= singular_table_name %></h1>
1
+ <h1>Editing <%= human_name %></h1>
2
2
 
3
3
  <%%= render 'form' %>
4
4
 
5
- <%%= link_to "Show", @<%= singular_table_name %>, class: 'btn btn-primary' %> |
6
- <%%= link_to "Back to <%= plural_table_name %>", <%= index_helper %>_path, class: 'btn btn-default' %>
5
+ <%%= link_to icon(:info, text: 'Show'), @<%= singular_table_name %>, class: 'btn btn-primary' %> |
6
+ <%%= link_to icon(:arrow_left, text: 'Back to <%= plural_table_name.titleize %>'), <%= index_helper %>_path, class: 'btn btn-default' %>
@@ -1,4 +1,4 @@
1
- <h1><%= plural_table_name %></h1>
1
+ <h1><%= plural_table_name.titleize %></h1>
2
2
 
3
3
  <table class="table">
4
4
  <thead>
@@ -16,7 +16,11 @@
16
16
  <td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
17
17
  <% end -%>
18
18
  <td>
19
- <td><%%= render 'shared/admin_actions', obj: category %></td>
19
+ <td>
20
+ <%%= link_to icon(:info), <%= singular_table_name %>, class: 'btn btn-primary' %>
21
+ <%%= link_to icon(:edit), edit_<%= singular_table_name %>_path(<%= singular_table_name %>), class: 'btn btn-warning' %>
22
+ <%%= link_to icon(:trash_o), <%= singular_table_name %>, method: :delete, data: { confirm: "Are you sure you want to delete the #{human_name} '#{<%= singular_table_name %>}'?" }, class: 'btn btn-danger' %>
23
+ </td>
20
24
  </td>
21
25
  <%% end %>
22
26
  </tbody>
@@ -24,4 +28,4 @@
24
28
 
25
29
  <br />
26
30
 
27
- <%%= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path, class: 'btn btn-default' %>
31
+ <%%= link_to icon(:plus, text: 'New <%= human_name %>'), new_<%= singular_table_name %>_path, class: 'btn btn-success' %>
@@ -1,5 +1,5 @@
1
- <h1>New <%= singular_table_name %></h1>
1
+ <h1>New <%= human_name %></h1>
2
2
 
3
3
  <%%= render 'form' %>
4
4
 
5
- <%%= link_to 'Back to <%= plural_table_name %>', <%= index_helper %>_path, class: 'btn btn-default' %>
5
+ <%%= link_to icon(:arrow_left, text: 'Back to <%= plural_table_name.titleize %>'), <%= index_helper %>_path, class: 'btn btn-default' %>
@@ -6,5 +6,5 @@
6
6
 
7
7
  <% end -%>
8
8
 
9
- <%%= link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), class: 'btn btn-default' %>
10
- <%%= link_to 'Back to <%= plural_table_name %>', <%= index_helper %>_path, class: 'btn btn-default' %>
9
+ <%%= link_to icon(:edit, text: 'Edit'), edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), class: 'btn btn-default' %>
10
+ <%%= link_to icon(:arrow_left, text: 'Back to <%= plural_table_name.titleize %>'), <%= index_helper %>_path, class: 'btn btn-default' %>
@@ -1,3 +1,3 @@
1
1
  module Trireme
2
- VERSION = "0.0.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trireme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Sharpe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-01 00:00:00.000000000 Z
11
+ date: 2014-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,7 +57,6 @@ files:
57
57
  - lib/trireme/app_builder.rb
58
58
  - lib/trireme/generators/app_generator.rb
59
59
  - lib/trireme/templates/.rspec
60
- - lib/trireme/templates/Capfile
61
60
  - lib/trireme/templates/Guardfile
62
61
  - lib/trireme/templates/README.md.erb
63
62
  - lib/trireme/templates/additional_gems
@@ -69,28 +68,30 @@ files:
69
68
  - lib/trireme/templates/app/views/shared/_flashes.html.erb
70
69
  - lib/trireme/templates/app/views/shared/_form_errors.html.erb
71
70
  - lib/trireme/templates/config/deploy.rb.erb
72
- - lib/trireme/templates/config/deploy/production.rb
73
- - lib/trireme/templates/config/deploy/staging.rb
71
+ - lib/trireme/templates/config/deploy/production.rb.erb
72
+ - lib/trireme/templates/config/deploy/staging.rb.erb
74
73
  - lib/trireme/templates/config/environments/development.rb
75
74
  - lib/trireme/templates/config/environments/production.rb
76
75
  - lib/trireme/templates/config/environments/staging.rb
77
76
  - lib/trireme/templates/config/environments/test.rb
78
77
  - lib/trireme/templates/config/initializers/better_errors.rb
79
78
  - lib/trireme/templates/config/initializers/jazz_hands.rb
80
- - lib/trireme/templates/config/recipes/base.rb
81
- - lib/trireme/templates/config/recipes/check.rb
82
- - lib/trireme/templates/config/recipes/log.rb
83
- - lib/trireme/templates/config/recipes/logrotate.rb
84
- - lib/trireme/templates/config/recipes/nginx.rb
85
- - lib/trireme/templates/config/recipes/postgresql.rb
86
- - lib/trireme/templates/config/recipes/scripts/sql_functions.sql
87
- - lib/trireme/templates/config/recipes/templates/logrotate.erb
88
- - lib/trireme/templates/config/recipes/templates/nginx_unicorn.erb
89
- - lib/trireme/templates/config/recipes/templates/postgresql.yml.erb
90
- - lib/trireme/templates/config/recipes/templates/unicorn.rb.erb
91
- - lib/trireme/templates/config/recipes/templates/unicorn_init.erb
92
- - lib/trireme/templates/config/recipes/unicorn.rb
93
79
  - lib/trireme/templates/gitignore_additions
80
+ - lib/trireme/templates/lib/mina/check.rb
81
+ - lib/trireme/templates/lib/mina/db.rb.erb
82
+ - lib/trireme/templates/lib/mina/defaults.rb
83
+ - lib/trireme/templates/lib/mina/irc.rb.erb
84
+ - lib/trireme/templates/lib/mina/log.rb.erb
85
+ - lib/trireme/templates/lib/mina/logrotate.rb
86
+ - lib/trireme/templates/lib/mina/nginx.rb
87
+ - lib/trireme/templates/lib/mina/postgresql.rb
88
+ - lib/trireme/templates/lib/mina/templates/logrotate.erb
89
+ - lib/trireme/templates/lib/mina/templates/nginx_unicorn.erb
90
+ - lib/trireme/templates/lib/mina/templates/postgresql.yml.erb
91
+ - lib/trireme/templates/lib/mina/templates/unicorn.rb.erb
92
+ - lib/trireme/templates/lib/mina/templates/unicorn_init.erb
93
+ - lib/trireme/templates/lib/mina/unicorn.rb
94
+ - lib/trireme/templates/lib/mina/utility.rb
94
95
  - lib/trireme/templates/lib/templates/erb/scaffold/_form.html.erb
95
96
  - lib/trireme/templates/lib/templates/erb/scaffold/edit.html.erb
96
97
  - lib/trireme/templates/lib/templates/erb/scaffold/index.html.erb
@@ -1,4 +0,0 @@
1
- load 'deploy'
2
- # Uncomment if you are using Rails' asset pipeline
3
- load 'deploy/assets'
4
- load 'config/deploy' # remove this line to skip loading any of the default tasks
@@ -1,17 +0,0 @@
1
- # Domain name for nginx config
2
- set :domain_name, domain_base
3
-
4
- # Remove www from incoming requests
5
- set :rewrite_www, true
6
-
7
- # Include ssl information for nginx
8
- set :include_ssl, false
9
-
10
- # Default, requires setting server_ip
11
- set :default_host, true
12
- set :server_ip, "#{server_ip}"
13
-
14
- set :unicorn_workers, 1
15
-
16
- set :rails_env, "production"
17
- set :branch, "master"
@@ -1,8 +0,0 @@
1
- set :domain_name, "demo.#{domain_base}"
2
- set :rewrite_www, false
3
- set :include_ssl, false
4
- set :unicorn_workers, 1
5
- set :default_host, false
6
-
7
- set :rails_env, "staging"
8
- set :branch, "staging"
@@ -1,8 +0,0 @@
1
- def template(from, to)
2
- erb = File.read(File.expand_path("../templates/#{from}", __FILE__))
3
- put ERB.new(erb).result(binding), to
4
- end
5
-
6
- def set_default(name, *args, &block)
7
- set(name, *args, &block) unless exists?(name)
8
- end
@@ -1,6 +0,0 @@
1
- namespace :log do
2
- desc "View log tail"
3
- task :tail, roles: :app do
4
- run "tail #{shared_path}/log/#{rails_env}.log -n 50"
5
- end
6
- end
@@ -1,8 +0,0 @@
1
- namespace :logrotate do
2
- desc "Setup logrotate for all log files in log directory"
3
- task :setup, roles: :app do
4
- template "logrotate.erb", "/tmp/logrotate"
5
- run "#{sudo} mv /tmp/logrotate /etc/logrotate.d/#{application}_#{stage}"
6
- end
7
- after "deploy:setup", "logrotate:setup"
8
- end
@@ -1,17 +0,0 @@
1
- namespace :nginx do
2
- desc "Setup nginx configuration for this application"
3
- task :setup, roles: :web do
4
- template "nginx_unicorn.erb", "/tmp/nginx_conf"
5
- run "#{sudo} mv /tmp/nginx_conf /etc/nginx/sites-enabled/#{application}_#{stage}"
6
- run "#{sudo} rm -f /etc/nginx/sites-enabled/default"
7
- restart
8
- end
9
- after "deploy:setup", "nginx:setup"
10
-
11
- %w[start stop restart].each do |command|
12
- desc "#{command} nginx"
13
- task command, roles: :web do
14
- run "#{sudo} service nginx #{command}"
15
- end
16
- end
17
- end
@@ -1,32 +0,0 @@
1
- set_default(:postgresql_host, "localhost")
2
- set_default(:postgresql_user) { application }
3
- set_default(:postgresql_password) { Capistrano::CLI.password_prompt "PostgreSQL Password: " }
4
- set_default(:postgresql_database) { "#{application}_#{rails_env}" }
5
- set_default(:postgresql_pid) { "/var/run/postgresql/9.1-main.pid" }
6
-
7
- namespace :postgresql do
8
- desc "Create a user for this application."
9
- task :create_user, roles: :db, only: {primary: true} do
10
- run %Q{#{sudo} -u postgres psql -c "create user \"#{postgresql_user}\" with password '#{postgresql_password}';"; true}
11
- end
12
- after "deploy:setup", "postgresql:create_user"
13
-
14
- desc "Create a database for this application."
15
- task :create_database, roles: :db, only: {primary: true} do
16
- run %Q{#{sudo} -u postgres psql -c "create database \"#{postgresql_database}\" owner \"#{postgresql_user}\";"; true}
17
- end
18
- after "deploy:setup", "postgresql:create_database"
19
-
20
- desc "Generate the database.yml configuration file."
21
- task :setup, roles: :app do
22
- run "mkdir -p #{shared_path}/config"
23
- template "postgresql.yml.erb", "#{shared_path}/config/database.yml"
24
- end
25
- after "deploy:setup", "postgresql:setup"
26
-
27
- desc "Symlink the database.yml file into latest release"
28
- task :symlink, roles: :app do
29
- run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
30
- end
31
- after "deploy:finalize_update", "postgresql:symlink"
32
- end
@@ -1,23 +0,0 @@
1
- CREATE OR REPLACE FUNCTION create_role_if_not_exists(r_name TEXT, r_pass TEXT)
2
- RETURNS void AS $$
3
- BEGIN
4
- IF NOT EXISTS (
5
- SELECT *
6
- FROM pg_catalog.pg_user
7
- WHERE usename = $1) THEN
8
- EXECUTE format('CREATE ROLE %s LOGIN PASSWORD ''%s'' CREATEDB', $1, $2);
9
- END IF;
10
- END;
11
- $$ LANGUAGE plpgsql;
12
-
13
- CREATE OR REPLACE FUNCTION create_database_if_not_exists(db_name TEXT, db_owner TEXT)
14
- RETURNS void AS $$
15
- BEGIN
16
- IF NOT EXISTS (
17
- SELECT *
18
- FROM pg_catalog.pg_database
19
- WHERE datname = $1) THEN
20
- EXECUTE format('CREATE DATABASE %s OWNER %s', $1, $2);
21
- END IF;
22
- END;
23
- $$ LANGUAGE plpgsql;
@@ -1,26 +0,0 @@
1
- set_default(:unicorn_user) { user }
2
- set_default(:unicorn_pid) { "#{current_path}/tmp/pids/unicorn.pid" }
3
- set_default(:unicorn_config) { "#{shared_path}/config/unicorn.rb" }
4
- set_default(:unicorn_log) { "#{shared_path}/log/unicorn.log" }
5
- set_default(:unicorn_workers, 2)
6
-
7
- namespace :unicorn do
8
- desc "Setup Unicorn initializer and app configuration"
9
- task :setup, roles: :app do
10
- run "mkdir -p #{shared_path}/config"
11
- template "unicorn.rb.erb", unicorn_config
12
- template "unicorn_init.erb", "/tmp/unicorn_init"
13
- run "chmod +x /tmp/unicorn_init"
14
- run "#{sudo} mv /tmp/unicorn_init /etc/init.d/unicorn_#{application}_#{rails_env}"
15
- run "#{sudo} update-rc.d -f unicorn_#{application}_#{rails_env} defaults"
16
- end
17
- after "deploy:setup", "unicorn:setup"
18
-
19
- %w[start stop restart].each do |command|
20
- desc "#{command.capitalize} unicorn"
21
- task command, roles: :app do
22
- run "/etc/init.d/unicorn_#{application}_#{stage} #{command}"
23
- end
24
- after "deploy:#{command}", "unicorn:#{command}"
25
- end
26
- end