webflow_cap 0.1.0 → 0.2.3

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: 854e7a35c956f8165e72f5ef1bc004536f285771
4
- data.tar.gz: 8dc01728439291374479851e173d88b08fa328f2
3
+ metadata.gz: 74f2868530b5363dab7ed43334cce69098d502af
4
+ data.tar.gz: e122a0647df6f6aa6fe009fb8eb8d930595529f3
5
5
  SHA512:
6
- metadata.gz: 8ba10479822cbea1e5cb2f48c192360368e9cb3df49ba5226d2742f722a4e0f1695b964fe85f7415b19c5b2f36465ac89d9590b58d7382d8257ade81ac6abad9
7
- data.tar.gz: 0a92b7684df93aae77f26ce59e0e201e308a65a4c7cb4a27d46c182a91870597218b180497a9473648fb940e00fab95263691e906c60fc9e02c9e4aa33840a29
6
+ metadata.gz: 2b50e2682615ac7da485e18743865a2818c12a5f24ba7565ecb077043ef5b117ba1df84b29f88740348a08c2fba609435bbffbab4dee811bbe0883d6829822f9
7
+ data.tar.gz: 624812568eea5011dab37f02ecc5c08dae00a80d15326a4ce012ae1edfdf9447efb0997415083cbe6549361c94615be8e3f5876b1cd869bac419e859a9f096ea
data/README.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # webflow_cap
2
-
2
+
3
+ This gem is a plugin for [capistrano 3](http://capistranorb.com/) to make deployment of rails applications to [.webflow](http://www.webflow.de) servers easy.
4
+
5
+ Applications that get deployed with the capistrano tasks are automatically configured and setup to run supervised.
6
+ The database.yml is automatically created and configured to use the right connection settings.
7
+ An application specific database will also be created.
8
+
9
+ The application server (which defaults to [passenger standalone](https://www.phusionpassenger.com/#about)) will be started and supervised by [runit](http://smarden.org/runit/).
10
+
11
+ ## Usage
12
+
13
+ 1. Add the following lines to your Gemfile:
14
+
15
+ ```ruby
16
+ gem 'passenger'
17
+
18
+ group :development do
19
+ gem 'capistrano-rails', group: :development
20
+ gem 'webflow_cap'
21
+ end
22
+ ```
23
+ 2. Execute `bundle install` to install these gems.
24
+ 3. Execute `bundle exec webflow_capify` which asks you some questions and installs capistrano templates with sane defaults to your project.
25
+
26
+ With these capistrano files in place all you need to do is execute `bundle exec cap production deploy` to spin up your rails application.
27
+
3
28
  ## License
4
29
 
5
30
  MIT; Copyright (c) 2014 Florian Aman, webflow GmbH
@@ -0,0 +1,14 @@
1
+ #!/bin/env ruby
2
+ require 'capistrano/all'
3
+
4
+ stages = "production"
5
+ set :stage, :production
6
+ role :app, %w{}
7
+
8
+ require 'capistrano/setup'
9
+ require 'capistrano/deploy'
10
+ require 'capistrano/webflow/install'
11
+
12
+ Dir.glob('capistrano/tasks/*.rake').each { |r| import r }
13
+
14
+ Capistrano::Application.invoke("webflow:install")
@@ -1,7 +1,7 @@
1
1
  namespace :load do
2
2
  task :defaults do
3
3
  # variables with default values
4
- set :application_server, fetch(:application_server, "puma")
4
+ set :application_server, fetch(:application_server, "passenger")
5
5
  set :branch, fetch(:branch, "master")
6
6
  set :scm, fetch(:scm, :git)
7
7
  set :ruby_version, fetch(:ruby_version, "2.1")
@@ -13,7 +13,7 @@ namespace :load do
13
13
 
14
14
  set :home, -> { "/docs/#{fetch :user}" }
15
15
  set :deploy_to, -> { "/docs/#{fetch :user}/#{fetch :domain}/#{fetch :application}" }
16
- set :server_port, -> { 10000 + ((fetch :user)[3..6] + "0").to_i }
16
+ set :server_port, -> { 10000 + ((fetch :user)[4..6] + "0").to_i }
17
17
 
18
18
  set :linked_files, %w{}
19
19
 
@@ -24,22 +24,26 @@ namespace :load do
24
24
  end
25
25
 
26
26
  namespace :deploy do
27
+ desc 'Start application'
27
28
  task :start do
28
29
  on roles :all do
29
30
  execute "sv start #{fetch :runit_service_dir}"
30
31
  end
31
32
  end
33
+ desc 'Stop application'
32
34
  task :stop do
33
35
  on roles :all do
34
36
  execute "sv stop #{fetch :runit_service_dir}"
35
37
  end
36
38
  end
39
+ desc 'Restart application'
37
40
  task :restart do
38
41
  on roles :all do
39
42
  execute "sv restart #{fetch :runit_service_dir}"
40
43
  end
41
44
  end
42
45
 
46
+ desc 'Show supervision status for application'
43
47
  task :status do
44
48
  on roles :all do
45
49
  execute "sv status #{fetch :runit_service_dir}"
@@ -1,11 +1,12 @@
1
1
  namespace :load do
2
2
  task :defaults do
3
- set :runit_service_dir, -> {"#{fetch :home}/etc/service/rails-#{fetch :server_port}-#{fetch :domain}-#{fetch :application}"}
3
+ set :runit_service_dir, -> {"#{fetch :home}/etc/service/rails-#{fetch :server_port}-#{fetch :domain}-#{fetch :application}-#{fetch :stage}"}
4
4
  end
5
5
  end
6
6
 
7
7
  namespace :rails do
8
- task :versions do
8
+ desc 'Show possible ruby versions on configured .webflow server'
9
+ task :ruby_versions do
9
10
  on roles :all do
10
11
  within '/opt/ruby' do
11
12
  execute(:ls)
@@ -35,7 +36,7 @@ RewriteRule ^(.*)$ http://localhost:#{fetch :server_port}/$1 [P]
35
36
 
36
37
  task :setup_application_server do
37
38
  on roles :all do
38
- daemon_name = "rails-#{fetch :server_port}-#{fetch :domain}-#{fetch :application}"
39
+ daemon_name = "rails-#{fetch :server_port}-#{fetch :domain}-#{fetch :application}-#{fetch :stage}"
39
40
  runit_dir = "#{fetch :home}/etc/sv/#{daemon_name}"
40
41
 
41
42
  if test("[ -e #{runit_dir} ]")
@@ -43,6 +44,9 @@ RewriteRule ^(.*)$ http://localhost:#{fetch :server_port}/$1 [P]
43
44
  next
44
45
  end
45
46
 
47
+ application_server = fetch(:application_server)
48
+ application_server + ' start' if application_server == 'passenger'
49
+
46
50
  daemon_script = <<-EOF
47
51
  #!/bin/bash -e
48
52
  exec 2>&1
@@ -51,7 +55,7 @@ export PATH=#{fetch(:default_env)['PATH']}
51
55
  source $HOME/.bashrc
52
56
  source $HOME/#{fetch :domain}/etc/rubyrc
53
57
  cd #{fetch :deploy_to}/current
54
- exec bundle exec #{fetch :application_server} -p #{fetch :server_port} -e #{fetch :stage} 2>&1
58
+ exec bundle exec #{application_server} -p #{fetch :server_port} -e #{fetch :stage} 2>&1
55
59
  EOF
56
60
 
57
61
  log_script = <<-EOF
@@ -0,0 +1,67 @@
1
+ require 'erb'
2
+ require 'pathname'
3
+ require 'capistrano/configuration/question.rb'
4
+
5
+ namespace :webflow do
6
+ desc "Install webflow flavoured capistrano files"
7
+ task :install do
8
+ question = Capistrano::Configuration::Question
9
+
10
+ repository_url = if File.exists?(Dir.getwd + '/.git')
11
+ `git config --get remote.origin.url`.strip
12
+ end
13
+
14
+ set :application, ask("Application name", File.basename(Dir.getwd))
15
+ set :ruby_version, ask("Ruby version", "2.1.5")
16
+ set :repo_url, ask("Repository URL", repository_url)
17
+ set :user, ask("Username", "f909999")
18
+ set :domain, ask("Domain", "example.com")
19
+ set :server, -> { ask("Server", fetch(:domain)) }
20
+ set :server_port, -> { 10000 + ((fetch :user)[4..6] + "0").to_i }
21
+
22
+ @application = fetch(:application)
23
+ @ruby_version = fetch(:ruby_version)
24
+ @repo_url = fetch(:repo_url)
25
+ @user = fetch(:user)
26
+ @domain = fetch(:domain)
27
+ @server = fetch(:server)
28
+ @server_port = fetch(:server_port)
29
+
30
+ envs = ENV['STAGES'] || 'staging,production'
31
+
32
+ tasks_dir = Pathname.new('lib/capistrano/tasks')
33
+ config_dir = Pathname.new('config')
34
+ deploy_dir = config_dir.join('deploy')
35
+
36
+ deploy_rb = File.expand_path("../../templates/deploy.rb.erb", __FILE__)
37
+ stage_rb = File.expand_path("../../templates/stage.rb.erb", __FILE__)
38
+ capfile = File.expand_path("../../templates/Capfile", __FILE__)
39
+
40
+ FileUtils.mkdir_p deploy_dir
41
+
42
+ entries = [{template: deploy_rb, file: config_dir.join('deploy.rb')}]
43
+ entries += envs.split(',').map { |stage| {template: stage_rb, file: deploy_dir.join("#{stage}.rb")} }
44
+
45
+ entries.each do |entry|
46
+ if File.exists?(entry[:file]) && question.new("Overwrite #{entry[:file]}?", 'y').call != 'y'
47
+ warn "[skip] #{entry[:file]} already exists"
48
+ else
49
+ File.open(entry[:file], 'w+') do |f|
50
+ f.write(ERB.new(File.read(entry[:template])).result(binding))
51
+ puts "create #{entry[:file]}"
52
+ end
53
+ end
54
+ end
55
+
56
+ FileUtils.mkdir_p tasks_dir
57
+
58
+ if File.exists?('Capfile') && question.new("Overwrite Capfile?", 'y').call != 'y'
59
+ warn "[skip] Capfile already exists"
60
+ else
61
+ FileUtils.cp(capfile, 'Capfile')
62
+ puts 'create Capfile'
63
+ end
64
+
65
+ puts 'Capified'
66
+ end
67
+ end
@@ -8,4 +8,8 @@ set :application, "<%= @application %>"
8
8
  set :repo_url, "<%= @repo_url %>"
9
9
 
10
10
  # use ruby_version to set a specific ruby version
11
- # set :ruby_version, "<%= @ruby_version %>"
11
+ # set :ruby_version, "<%= @ruby_version %>"
12
+
13
+ #set :application_server, "passenger"
14
+
15
+ #set :linked_files, %w{}
@@ -8,4 +8,6 @@ set :domain, "<%= @domain %>"
8
8
  # set :password_protected, true
9
9
 
10
10
  # set the servername to the servername or ipaddress from webflow e.g. server.example.com or 192.168.0.1
11
- server "<%= @server %>", user: fetch(:user), roles: %w(:web :app :db), primary: true
11
+ server "<%= @server %>", user: fetch(:user), roles: %w(:web :app :db), primary: true
12
+
13
+ #set :server_port, <%= @server_port %> # please only change after you talk to webflow staff
@@ -1,2 +1 @@
1
1
  load File.expand_path("../../tasks/base.rake", __FILE__)
2
- load File.expand_path("../../tasks/webflow.rake", __FILE__)
@@ -0,0 +1 @@
1
+ load File.expand_path("../../tasks/webflow_install.rake", __FILE__)
data/webflow_cap.gemspec CHANGED
@@ -13,10 +13,9 @@ Gem::Specification.new do |gem|
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "webflow_cap"
15
15
  gem.require_paths = ["lib"]
16
- gem.version = "0.1.0"
16
+ gem.version = "0.2.3"
17
17
 
18
18
  # dependencies
19
19
  gem.add_dependency 'capistrano', '~>3.2'
20
- gem.add_dependency 'capistrano-rails'
21
- gem.add_dependency 'capistrano-bundler'
20
+ gem.add_dependency 'capistrano-bundler', '~>1.1'
22
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webflow_cap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Aman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-28 00:00:00.000000000 Z
11
+ date: 2014-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -24,38 +24,25 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
- - !ruby/object:Gem::Dependency
28
- name: capistrano-rails
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: capistrano-bundler
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ">="
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: '1.1'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ">="
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: '1.1'
55
41
  description: Deploy Rails apps
56
42
  email:
57
43
  - fa@webflow.de
58
- executables: []
44
+ executables:
45
+ - webflow_capify
59
46
  extensions: []
60
47
  extra_rdoc_files: []
61
48
  files:
@@ -63,16 +50,18 @@ files:
63
50
  - LICENSE
64
51
  - README.md
65
52
  - Rakefile
53
+ - bin/webflow_capify
66
54
  - lib/capistrano/tasks/base.rake
67
55
  - lib/capistrano/tasks/htaccess.rake
68
56
  - lib/capistrano/tasks/mysql.rake
69
57
  - lib/capistrano/tasks/rails.rake
70
- - lib/capistrano/tasks/webflow.rake
58
+ - lib/capistrano/tasks/webflow_install.rake
71
59
  - lib/capistrano/templates/Capfile
72
60
  - lib/capistrano/templates/deploy.rb.erb
73
61
  - lib/capistrano/templates/stage.rb.erb
74
62
  - lib/capistrano/webflow/base.rb
75
63
  - lib/capistrano/webflow/htaccess.rb
64
+ - lib/capistrano/webflow/install.rb
76
65
  - lib/capistrano/webflow/mysql.rb
77
66
  - lib/capistrano/webflow/rails.rb
78
67
  - lib/webflow_cap.rb
@@ -1,60 +0,0 @@
1
- require 'erb'
2
- require 'pathname'
3
-
4
- namespace :webflow do
5
- desc "Install webflow flavoured capistrano files"
6
- task :install do
7
- on roles :all do
8
- set :application, ask("Application name", "APP")
9
- set :ruby_version, ask("Ruby version", "2.1.5")
10
- set :repo_url, ask("Repository URL", nil)
11
- set :user, ask("Username", "f999999")
12
- set :domain, ask("Domain", "example.com")
13
- set :server, ask("Server", "server.example.com")
14
-
15
- @application = fetch(:application)
16
- @ruby_version = fetch(:ruby_version)
17
- @repo_url = fetch(:repo_url)
18
- @user = fetch(:user)
19
- @domain = fetch(:domain)
20
- @server = fetch(:server)
21
-
22
- envs = ENV['STAGES'] || 'staging,production'
23
-
24
- tasks_dir = Pathname.new('lib/capistrano/tasks')
25
- config_dir = Pathname.new('config')
26
- deploy_dir = config_dir.join('deploy')
27
-
28
- deploy_rb = File.expand_path("../../templates/deploy.rb.erb", __FILE__)
29
- stage_rb = File.expand_path("../../templates/stage.rb.erb", __FILE__)
30
- capfile = File.expand_path("../../templates/Capfile", __FILE__)
31
-
32
- execute "mkdir -p #{deploy_dir}"
33
-
34
- entries = [{template: deploy_rb, file: config_dir.join('deploy.rb')}]
35
- entries += envs.split(',').map { |stage| {template: stage_rb, file: deploy_dir.join("#{stage}.rb")} }
36
-
37
- entries.each do |entry|
38
- if File.exists?(entry[:file])
39
- warn "[skip] #{entry[:file]} already exists"
40
- else
41
- File.open(entry[:file], 'w+') do |f|
42
- f.write(ERB.new(File.read(entry[:template])).result(binding))
43
- puts "create #{entry[:file]}"
44
- end
45
- end
46
- end
47
-
48
- execute "mkdir -p #{tasks_dir}"
49
-
50
- if File.exists?('Capfile')
51
- warn "[skip] Capfile already exists"
52
- else
53
- FileUtils.cp(capfile, 'Capfile')
54
- puts 'create Capfile'
55
- end
56
- end
57
-
58
- puts 'Capified'
59
- end
60
- end