railman 0.2.0 → 0.3.0

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
  SHA1:
3
- metadata.gz: 2452bb4c3c783b6efe3694e9582281bbcd8bc5f9
4
- data.tar.gz: 63fbcfea9787bb517762ccc91b06a183de7844ca
3
+ metadata.gz: e1ecb9d6bcb4c0a2dbd78093cd8892efe6b89884
4
+ data.tar.gz: 9a65f64857c7dd6e9dd27e451addebb774d4eb86
5
5
  SHA512:
6
- metadata.gz: 4b0ecbc34ee75ad020c4516b20615515aeaad8ad67083d3f2b26bcd367f76581bb9397285fcc9bc8af9d7f5c688bcc70fb8fa9aedce93110289a0c4688375b74
7
- data.tar.gz: 21daa85a4cbc6f3c4e6c154a94c83d64a92518bcc904aaf500fa26333a0f57a98d4ec28f37e4bfff7111c6c7bbd7f84076f0ba0c84318e823c451233ed46badc
6
+ metadata.gz: 9d436a33a67ad227d9975bb7059ae627aa9133c75af7cd6b3f4d3cea50b4547ffe81f3e716313af694cc3c3d9549b81364a496f4faea32612c4d0681994716f2
7
+ data.tar.gz: 8370baad6e71bf1d1436e25c299e188359496c1ca80739b25e5d3613272c4df32e4813be9dcdb1b35bf1c5ee02beac411e50eeac28f2e3bf474bba55ecc120c1
data/README.md CHANGED
@@ -35,6 +35,7 @@ Or install it yourself as:
35
35
  ## Usage
36
36
 
37
37
  Run `railman new APP_NAME` to create new rails application.
38
+ Run `railman upgrade APP_NAME` to upgrade existing rails application.
38
39
 
39
40
 
40
41
  ## Development
data/lib/railman/cli.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'thor'
2
+ require 'yaml'
2
3
  require 'creategem'
4
+ require 'railman/config'
3
5
  require 'railman/secret'
4
6
 
5
7
  module Railman
@@ -17,50 +19,74 @@ module Railman
17
19
  desc "new APPNAME", "Create new rails application named APPNAME"
18
20
  def new(app_name)
19
21
  say "Create a new rails application named: #{app_name}", :green
20
- apply_rails_template(app_name)
22
+ config = create_config(app_name)
23
+ apply_rails_template(config)
21
24
  say "The rails application '#{app_name}' was successfully created.", :green
22
25
  say "Please check the settings in .env", :blue
23
26
  end
24
27
 
25
28
  desc "upgrade APPNAME", "Upgrade the rails upplication named APPNAME"
26
29
  def upgrade(app_name)
27
- puts "TODO upgrade the rails application: #{app_name}"
28
- apply_rails_template(app_name, false)
30
+ puts "Upgrade the rails application: #{app_name}"
31
+ config = load_config(app_name)
32
+ apply_rails_template(config, false)
29
33
  say "The rails application '#{app_name}' was successfully upgraded.", :green
30
34
  say "Please check the settings in .env", :blue
31
35
  end
32
36
 
33
37
  private
34
38
 
35
- def apply_rails_template(app_name, create = true)
36
- @app_name = app_name
37
- @class_name = Thor::Util.camel_case(app_name)
38
- @admin_email = ask("What is the adminitrator email address?")
39
- @domain = ask("What is the url of the application (without http and www)?")
40
- if yes?("Do you want me to configure www.#{@domain} domain to be redirected to #{@domain}? (y/n)")
41
- @www_domain = "www.#{@domain}"
42
- @domains = [@domain, @www_domain]
39
+ def create_config(app_name)
40
+ config = Railman::Config.new
41
+ config.app_name = app_name
42
+ config.class_name = Thor::Util.camel_case(app_name)
43
+ config.admin_email = ask("What is the adminitrator email address?")
44
+ config.domain = ask("What is the url of the application (without http and www)?")
45
+ if yes?("Do you want me to configure www.#{config.domain} domain to be redirected to #{config.domain}? (y/n)")
46
+ config.www_domain = "www.#{config.domain}"
47
+ config.domains = [config.domain, config.www_domain]
43
48
  else
44
- @www_domain = nil
45
- @domains = [@domain]
49
+ config.www_domain = nil
50
+ config.domains = [config.domain]
46
51
  end
47
- @server = ask("What is the name of the production server?")
52
+ config
53
+ end
54
+
55
+ def load_config(app_name)
56
+ if File.exists? File.join(app_name, ".railman")
57
+ YAML::load_file File.join(app_name, ".railman")
58
+ else
59
+ create_config(app_name)
60
+ end
61
+ end
62
+
63
+ def save_config(config)
64
+ File.open File.join(config.app_name, ".railman"), "w" do |file|
65
+ file.write config.to_yaml
66
+ end
67
+ end
68
+
69
+ def apply_rails_template(config, create = true)
70
+ @config = config
48
71
  @repository = Creategem::Repository.new(vendor: :bitbucket,
49
72
  user: git_repository_user_name(:bitbucket),
50
- name: app_name,
73
+ name: @config.app_name,
51
74
  gem_server_url: gem_server_url(:bitbucket))
52
75
  @rake_secret = "TODO: generate with: rake secret"
53
76
  @unicorn_behind_nginx = true
54
- directory "rails_app", app_name
55
- @rake_secret = Railman::Secret.generate_secret
56
- @unicorn_behind_nginx = false
57
- template "rails_app/.env.example.development.tt", "#{app_name}/.env"
58
- Dir.chdir app_name do
77
+ directory "rails_app", @config.app_name
78
+ if create
79
+ @rake_secret = Railman::Secret.generate_secret
80
+ @unicorn_behind_nginx = false
81
+ template "rails_app/.env.example.development.tt", "#{@config.app_name}/.env"
82
+ save_config(@config)
83
+ end
84
+ Dir.chdir @config.app_name do
59
85
  run "bundle install"
60
86
  run "chmod +x bin/*"
61
87
  if create
62
88
  create_local_git_repository
63
- create_remote_git_repository(@repository) if yes?("Do you want me to create bitbucket repository named #{app_name}? (y/n)")
89
+ create_remote_git_repository(@repository) if yes?("Do you want me to create bitbucket repository named #{@config.app_name}? (y/n)")
64
90
  end
65
91
  end
66
92
  end
@@ -0,0 +1,9 @@
1
+ require 'yaml'
2
+
3
+ # Railman::Config contains configuration parameters used to generate the rails application
4
+ # It is saved in .railman in the generated application, so that it can be used to upgrade the application later.
5
+ module Railman
6
+ class Config
7
+ attr_accessor :app_name, :class_name, :admin_email, :domain, :www_domain, :domains, :server
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Railman
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -3,7 +3,7 @@
3
3
  # Don't commit this file to Git !!! Copy from .env.example.development and modify for each machine
4
4
 
5
5
  # Application settings
6
- APP_NAME = '<%= app_name %>'
6
+ APP_NAME = '<%= @config.app_name %>'
7
7
 
8
8
 
9
9
  # Database settings
@@ -16,12 +16,12 @@ SECRET_TOKEN = '<%= @rake_secret %>'
16
16
 
17
17
 
18
18
  # Where to send exceptions and other admin emails
19
- ADMIN_EMAIL = '<%= @admin_email %>'
19
+ ADMIN_EMAIL = '<%= @config.admin_email %>'
20
20
 
21
21
 
22
22
  # Exception notification settings
23
- EXCEPTION_NOTIFICATION_EMAIL_PREFIX = '[<%= @class_name %>] '
24
- EXCEPTION_NOTIFICATION_SENDER = 'server@<%= @domain %>'
23
+ EXCEPTION_NOTIFICATION_EMAIL_PREFIX = '[<%= @config.class_name %>] '
24
+ EXCEPTION_NOTIFICATION_SENDER = 'server@<%= @config.domain %>'
25
25
 
26
26
 
27
27
  # Unicorn settings
@@ -3,7 +3,7 @@
3
3
  # Don't commit this file to Git !!! Copy from .env.example.production and modify for each machine
4
4
 
5
5
  # Application settings
6
- APP_NAME = '<%= app_name %>'
6
+ APP_NAME = '<%= @config.app_name %>'
7
7
 
8
8
 
9
9
  # Database settings
@@ -16,20 +16,20 @@ SECRET_TOKEN = '<%= @rake_secret %>'
16
16
 
17
17
 
18
18
  # SMTP server settings
19
- SMTP_SERVER = 'mail.<%= @domain %>'
20
- SMTP_USER = 'server@<%= @domain %>'
19
+ SMTP_SERVER = 'mail.<%= @config.domain %>'
20
+ SMTP_USER = 'server@<%= @config.domain %>'
21
21
  SMTP_PASSWORD = '*****'
22
- SMTP_DOMAIN = '<%= @domain %>'
23
- SMTP_DEFAULT_URL = '<%= @domain %>'
22
+ SMTP_DOMAIN = '<%= @config.domain %>'
23
+ SMTP_DEFAULT_URL = '<%= @config.domain %>'
24
24
 
25
25
 
26
26
  # Where to send exceptions and other admin emails
27
- ADMIN_EMAIL = '<%= @admin_email %>'
27
+ ADMIN_EMAIL = '<%= @config.admin_email %>'
28
28
 
29
29
 
30
30
  # Exception notification settings
31
- EXCEPTION_NOTIFICATION_EMAIL_PREFIX = '[<%= @class_name %>] '
32
- EXCEPTION_NOTIFICATION_SENDER = 'server@<%= @domain %>'
31
+ EXCEPTION_NOTIFICATION_EMAIL_PREFIX = '[<%= @config.class_name %>] '
32
+ EXCEPTION_NOTIFICATION_SENDER = 'server@<%= @config.domain %>'
33
33
 
34
34
 
35
35
  # Unicorn settings
@@ -1,9 +1,9 @@
1
1
  # Eye configuration file (https://github.com/kostya/eye)
2
2
  # Load with: 'eye l Eyefile'
3
3
  # Watch processes: 'eye w'
4
- # Stop all processes: 'eye stop <%= app_name %>'
5
- # Start all processes: 'eye start <%= app_name %>'
6
- # Restart unicorn: 'eye restart <%= app_name %>:unicorn'
4
+ # Stop all processes: 'eye stop <%= @config.app_name %>'
5
+ # Start all processes: 'eye start <%= @config.app_name %>'
6
+ # Restart unicorn: 'eye restart <%= @config.app_name %>:unicorn'
7
7
 
8
8
  APP_ROOT = File.expand_path('..', __FILE__)
9
9
 
@@ -1 +1 @@
1
- <p>Welcome to: <%= @class_name %></p>
1
+ <p>Welcome to: <%= @config.class_name %></p>
@@ -6,7 +6,7 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
7
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
8
8
 
9
- <title><%= @class_name %></title>
9
+ <title><%= @config.class_name %></title>
10
10
  <%%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
11
11
  <%%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
12
12
 
@@ -6,7 +6,7 @@ require 'rails/all'
6
6
  # you've limited to :test, :development, or :production.
7
7
  Bundler.require(*Rails.groups)
8
8
 
9
- module <%= @class_name %>
9
+ module <%= @config.class_name %>
10
10
  class Application < Rails::Application
11
11
  # Settings in config/environments/* take precedence over those specified here.
12
12
  # Application configuration should go into files in config/initializers
@@ -3,7 +3,7 @@ development:
3
3
  encoding: unicode
4
4
  port: 5432
5
5
  host: localhost
6
- database: <%= app_name %>_development
6
+ database: <%= @config.app_name %>_development
7
7
  username: <%%= ENV['DB_USER'] %>
8
8
  password: <%%= ENV['DB_PASSWORD'] %>
9
9
  pool: 5
@@ -14,7 +14,7 @@ test:
14
14
  encoding: unicode
15
15
  port: 5432
16
16
  host: localhost
17
- database: <%= app_name %>_test
17
+ database: <%= @config.app_name %>_test
18
18
  username: <%%= ENV['DB_USER'] %>
19
19
  password: <%%= ENV['DB_PASSWORD'] %>
20
20
  pool: 5
@@ -25,7 +25,7 @@ production:
25
25
  encoding: unicode
26
26
  port: 5432
27
27
  host: localhost
28
- database: <%= app_name %>_production
28
+ database: <%= @config.app_name %>_production
29
29
  username: <%%= ENV['DB_USER'] %>
30
30
  password: <%%= ENV['DB_PASSWORD'] %>
31
31
  pool: 15
@@ -1,7 +1,9 @@
1
1
  # Capistrano deployment tasks
2
2
  lock '3.4.1'
3
3
 
4
- set :application, '<%= app_name %>'
4
+ require 'securerandom'
5
+
6
+ set :application, '<%= @config.app_name %>'
5
7
  set :repo_url, '<%= @repository.origin %>'
6
8
  set :deploy_to, "/home/deploy/apps/#{fetch(:application)}"
7
9
  set :rbenv_home, '/home/deploy/.rbenv'
@@ -45,7 +47,9 @@ task :setup do
45
47
  execute :eye, :start, fetch(:application)
46
48
  execute :service, "nginx restart"
47
49
  else
48
- warn "TODO: Create .env on the server by copying from .env.example.production and modify your database and smtp settings."
50
+ execute :cp, '.env.example.production', '.env'
51
+ execute "sed -i -e 's/TODO: generate with: rake secret/#{SecureRandom.hex(64)}/g' .en"
52
+ warn "TODO: Edit .env and modify your database and smtp settings."
49
53
  warn "TODO: Create rails secret token with 'rake secret' and insert it into .env"
50
54
  warn "TODO: Create ssl certificates by running the following command as root: /etc/letsencrypt/generate_letsencrypt.sh"
51
55
  warn "TODO: Run 'cap ENV setup' again!"
@@ -1,4 +1,4 @@
1
1
  # production server configuration for capistrano
2
- set :server, '<%= @server %>'
2
+ set :server, '<%= @config.server %>'
3
3
  set :user, 'deploy'
4
4
  server fetch(:server), user: fetch(:user), roles: %w{web app db}
@@ -56,7 +56,7 @@ Rails.application.configure do
56
56
 
57
57
  # Use a different cache store in production.
58
58
  # config.cache_store = :mem_cache_store
59
- config.cache_store = :dalli_store, { namespace: ENV['APP_NAME'] }
59
+ config.cache_store = :dalli_store, { namespace: '<%= @config.app_name %>:' }
60
60
 
61
61
  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
62
62
  # config.action_controller.asset_host = 'http://assets.example.com'
@@ -1,6 +1,6 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
3
  Rails.application.config.session_store :redis_session_store, {
4
- key: "_<%= app_name %>_session",
5
- redis: { key_prefix: "<%= app_name %>:", expire_after: 2.minutes }
4
+ key: "_<%= @config.app_name %>_session",
5
+ redis: { key_prefix: "<%= @config.app_name %>:", expire_after: 2.minutes }
6
6
  }
@@ -1,7 +1,7 @@
1
1
  require 'sidekiq/scheduler'
2
2
 
3
- # Configure Sidekiq Redis connection to use the '<%= app_name %>' namespace
4
- redis_config = { url: 'redis://localhost:6379', namespace: '<%= app_name %>' }
3
+ # Configure Sidekiq Redis connection to use the '<%= @config.app_name %>' namespace
4
+ redis_config = { url: 'redis://localhost:6379', namespace: '<%= @config.app_name %>:' }
5
5
 
6
6
  Sidekiq.configure_server do |config|
7
7
  config.redis = redis_config
@@ -2,13 +2,13 @@
2
2
  rsa-key-size = 4096
3
3
 
4
4
  # this address will receive renewal reminders, IIRC
5
- email = <%= @admin_email %>
5
+ email = <%= @config.admin_email %>
6
6
 
7
7
  # Generate certificates for the specified domains
8
- domains = <%= @domains.join(',') %>
8
+ domains = <%= @config.domains.join(',') %>
9
9
 
10
10
  # turn off the ncurses UI, we want this to be run as a cronjob
11
11
  text = True
12
12
 
13
13
  # authenticate by placing a file in the webroot (under .well-known/acme-challenge/) and then letting LE fetch it
14
- webroot-path = /home/deploy/apps/<%= app_name %>
14
+ webroot-path = /home/deploy/apps/<%= @config.app_name %>
@@ -1,4 +1,4 @@
1
- /home/deploy/apps/<%= app_name %>/log/*.log {
1
+ /home/deploy/apps/<%= @config.app_name %>/log/*.log {
2
2
  daily
3
3
  missingok
4
4
  rotate 9
@@ -1,13 +1,13 @@
1
- upstream <%= app_name %> {
2
- server unix:/tmp/unicorn.<%= app_name %>.sock fail_timeout=0;
1
+ upstream <%= @config.app_name %> {
2
+ server unix:/tmp/unicorn.<%= @config.app_name %>.sock fail_timeout=0;
3
3
  }
4
4
 
5
5
  server {
6
6
  listen 443 ssl;
7
- server_name <%= @domain %>;
7
+ server_name <%= @config.domain %>;
8
8
 
9
9
  index index.html;
10
- root /home/deploy/apps/<%= app_name %>/public;
10
+ root /home/deploy/apps/<%= @config.app_name %>/public;
11
11
  try_files $uri/index.html $uri @app;
12
12
 
13
13
  location @app {
@@ -18,7 +18,7 @@ server {
18
18
 
19
19
  proxy_set_header Host $http_host;
20
20
  proxy_redirect off;
21
- proxy_pass http://<%= app_name %>;
21
+ proxy_pass http://<%= @config.app_name %>;
22
22
  }
23
23
 
24
24
  client_max_body_size 100m;
@@ -37,17 +37,17 @@ server {
37
37
  }
38
38
 
39
39
  location ~ ^/(assets)/ {
40
- root /home/deploy/apps/<%= app_name %>/public;
40
+ root /home/deploy/apps/<%= @config.app_name %>/public;
41
41
  gzip_static on; # to serve pre-gzipped version
42
42
  expires max;
43
43
  add_header Cache-Control public;
44
44
  }
45
45
 
46
46
  # Let's Encrypt certificates
47
- ssl_certificate /etc/letsencrypt/live/<%= @domain %>/fullchain.pem;
48
- ssl_certificate_key /etc/letsencrypt/live/<%= @domain %>/privkey.pem;
47
+ ssl_certificate /etc/letsencrypt/live/<%= @config.domain %>/fullchain.pem;
48
+ ssl_certificate_key /etc/letsencrypt/live/<%= @config.domain %>/privkey.pem;
49
49
 
50
- location /home/deploy/apps/<%= app_name %>/public/.well-known {
50
+ location /home/deploy/apps/<%= @config.app_name %>/public/.well-known {
51
51
  allow all;
52
52
  }
53
53
  }
@@ -55,18 +55,18 @@ server {
55
55
 
56
56
  server {
57
57
  listen 80;
58
- server_name <%= @domains.join(' ') %>;
59
- return 301 https://<%= @domain %>$request_uri;
58
+ server_name <%= @config.domains.join(' ') %>;
59
+ return 301 https://<%= @config.domain %>$request_uri;
60
60
  }
61
61
 
62
- <% if @www_domain %>
62
+ <% if @config.www_domain %>
63
63
  server {
64
64
  listen 443 ssl;
65
- server_name <%= @www_domain %>;
66
- return 301 $scheme://<%= @domain %>$request_uri;
65
+ server_name <%= @config.www_domain %>;
66
+ return 301 $scheme://<%= @config.domain %>$request_uri;
67
67
 
68
68
  # Let's Encrypt certificates
69
- ssl_certificate /etc/letsencrypt/live/<%= @domain %>/fullchain.pem;
70
- ssl_certificate_key /etc/letsencrypt/live/<%= @domain %>/privkey.pem;
69
+ ssl_certificate /etc/letsencrypt/live/<%= @config.domain %>/fullchain.pem;
70
+ ssl_certificate_key /etc/letsencrypt/live/<%= @config.domain %>/privkey.pem;
71
71
  }
72
72
  <% end %>
@@ -6,7 +6,7 @@ require 'dotenv'
6
6
  Dotenv.load
7
7
 
8
8
  if ENV['UNICORN_BEHIND_NGINX']
9
- listen '/tmp/unicorn.<%= app_name %>.sock'
9
+ listen '/tmp/unicorn.<%= @config.app_name %>.sock'
10
10
  else
11
11
  listen Integer(ENV['UNICORN_PORT'] || 3000)
12
12
  end
@@ -4,6 +4,6 @@ class HomepageTest < WebTest
4
4
  test 'homepage' do
5
5
  visit '/'
6
6
  screenshot 'homepage'
7
- must_have_content 'Welcome to: <%= @class_name %>'
7
+ must_have_content 'Welcome to: <%= @config.class_name %>'
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Jancev
@@ -157,6 +157,7 @@ files:
157
157
  - exe/railman
158
158
  - lib/railman.rb
159
159
  - lib/railman/cli.rb
160
+ - lib/railman/config.rb
160
161
  - lib/railman/secret.rb
161
162
  - lib/railman/version.rb
162
163
  - railman.gemspec
@@ -205,7 +206,7 @@ files:
205
206
  - templates/rails_app/config/deploy/production.rb.tt
206
207
  - templates/rails_app/config/environment.rb
207
208
  - templates/rails_app/config/environments/development.rb
208
- - templates/rails_app/config/environments/production.rb
209
+ - templates/rails_app/config/environments/production.rb.tt
209
210
  - templates/rails_app/config/environments/test.rb
210
211
  - templates/rails_app/config/initializers/assets.rb
211
212
  - templates/rails_app/config/initializers/backtrace_silencers.rb