akitaonrails-locarails 1.1.1 → 1.1.2
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.
- data/bin/locarails +22 -8
- data/lib/locarails/version.rb +1 -1
- data/locarails.gemspec +19 -4
- data/templates/deploy.common.rb.erb +60 -17
- data/templates/deploy.rb.erb +12 -10
- data/templates/locaweb_backup.rb +25 -14
- metadata +20 -3
data/bin/locarails
CHANGED
@@ -13,6 +13,7 @@ end
|
|
13
13
|
require 'ostruct'
|
14
14
|
require 'optparse'
|
15
15
|
require 'erb'
|
16
|
+
require 'highline/import'
|
16
17
|
|
17
18
|
# configuracoes da sua hospedagem
|
18
19
|
config = OpenStruct.new
|
@@ -74,9 +75,14 @@ elsif ARGV.length > 1
|
|
74
75
|
abort "Argumentos demais; por favor especifique somente o diretorio da aplicacao Rails.."
|
75
76
|
end
|
76
77
|
|
77
|
-
def get_input(message)
|
78
|
-
|
79
|
-
|
78
|
+
def get_input(message, default_value = nil)
|
79
|
+
result = if message =~ /senha/
|
80
|
+
ask("* #{message} > ") { |q| q.echo = "*" }
|
81
|
+
else
|
82
|
+
ask("* #{message} > ")
|
83
|
+
end
|
84
|
+
result = default_value if default_value && result.empty?
|
85
|
+
result
|
80
86
|
end
|
81
87
|
|
82
88
|
# configuracoes locais da sua maquina
|
@@ -112,10 +118,16 @@ STR
|
|
112
118
|
config.app_name = get_input( "Nome da sua aplicacao" ) if config.app_name.nil? || config.app_name.empty?
|
113
119
|
config.dominio = get_input "Dominio do seu site (ex. teste.tempsite.ws)"
|
114
120
|
config.usuario = get_input "Seu usuario de hospedagem"
|
115
|
-
mysqlcfg.db = get_input "Nome do seu banco mysql"
|
116
|
-
mysqlcfg.user = get_input "Seu usuario de mysql"
|
121
|
+
mysqlcfg.db = get_input "Nome do seu banco mysql (enter para '#{config.usuario}')", config.usuario
|
122
|
+
mysqlcfg.user = get_input "Seu usuario de mysql (enter para #{mysqlcfg.db})", mysqlcfg.db
|
117
123
|
mysqlcfg.pass = get_input "Sua senha de mysql"
|
118
|
-
mysqlcfg.host = get_input "Seu servidor mysql (ex.
|
124
|
+
mysqlcfg.host = get_input "Seu servidor mysql (ex. mysqlxxxx.locaweb.com.br)"
|
125
|
+
mysqlcfg.host = "#{mysqlcfg.host}.locaweb.com.br" unless mysqlcfg.host =~ /locaweb\.com\.br/
|
126
|
+
if config.mode == 'git'
|
127
|
+
config.branch = get_input "Git branch (enter para 'master')", 'master'
|
128
|
+
config.remote_repo = get_input "Nome do repositorio remoto (enter para 'locaweb')", 'locaweb'
|
129
|
+
config.remote_git = "#{config.usuario}@#{config.dominio}:~/repo/#{config.app_name}.git"
|
130
|
+
end
|
119
131
|
|
120
132
|
# forca rodar capistrano
|
121
133
|
unless File.exists?("#{config.local_path}/Capfile")
|
@@ -131,8 +143,10 @@ STR
|
|
131
143
|
end
|
132
144
|
end
|
133
145
|
|
134
|
-
|
135
|
-
"#{config.
|
146
|
+
if config.mode == 'git'
|
147
|
+
FileUtils.copy_file("#{config.bin_path}/../templates/.gitignore",
|
148
|
+
"#{config.local_path}/.gitignore") unless File.exists?("#{config.local_path}/.gitignore")
|
149
|
+
end
|
136
150
|
|
137
151
|
File.open("#{config.local_path}/config/deploy.rb", 'w+') do |out|
|
138
152
|
erb = ERB.new(File.read("#{config.bin_path}/../templates/deploy.rb.erb"))
|
data/lib/locarails/version.rb
CHANGED
data/locarails.gemspec
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{locarails}
|
3
|
-
s.version = "1.1.
|
4
|
-
|
5
|
-
s.specification_version = 2 if s.respond_to? :specification_version=
|
3
|
+
s.version = "1.1.2"
|
6
4
|
|
7
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
6
|
s.authors = ["Fabio Akita"]
|
@@ -16,6 +14,23 @@ Gem::Specification.new do |s|
|
|
16
14
|
s.homepage = %q{http://www.locaweb.com.br/rails}
|
17
15
|
s.require_paths = ["lib"]
|
18
16
|
s.rubyforge_project = %q{locarails}
|
19
|
-
s.rubygems_version =
|
17
|
+
s.rubygems_version = [s.version]
|
20
18
|
s.summary = %q{Configuracao de Capistrano automatica para hospedagens Linux Locaweb.}
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
+
s.specification_version = 2
|
23
|
+
|
24
|
+
if current_version >= 3 then
|
25
|
+
s.add_runtime_dependency(%q<capistrano>, [">= 2.0.0"])
|
26
|
+
s.add_runtime_dependency(%q<highline>, [">= 0"])
|
27
|
+
else
|
28
|
+
s.add_dependency(%q<capistrano>, [">= 2.0.0"])
|
29
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<capistrano>, [">= 2.0.0"])
|
33
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
34
|
+
end
|
35
|
+
|
21
36
|
end
|
@@ -15,13 +15,18 @@ task :before_setup do
|
|
15
15
|
ts = Time.now.strftime("%y%m%d%H%M%S")
|
16
16
|
<% if config.mode == 'git' %>
|
17
17
|
# git folder
|
18
|
-
has_git = false
|
19
18
|
run "test -d #{git_repo} || mkdir -p -m 755 #{git_repo}"
|
20
19
|
run "test -d #{git_repo}/.git || cd #{git_repo} && git init"
|
21
20
|
git_config = File.join(File.dirname(__FILE__), "../.git/config")
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
|
22
|
+
has_git = false
|
23
|
+
if File.exists?(git_config)
|
24
|
+
`git remote rm #{remote_repo}` if File.read(git_config) =~ /\[remote\s+\"#{remote_repo}\"\]/
|
25
|
+
`git remote add #{remote_repo} #{repository}`
|
26
|
+
output = `git branch`.strip
|
27
|
+
`git checkout master && git checkout -b #{branch}` if output !~ /#{branch}/
|
28
|
+
`git checkout #{branch}` if output !~ /^\*\s+#{branch}/
|
29
|
+
`git push #{remote_repo} #{branch}`
|
25
30
|
has_git = true
|
26
31
|
end
|
27
32
|
<% end %>
|
@@ -32,22 +37,23 @@ task :before_setup do
|
|
32
37
|
run "if [ -d #{site_path} ]; then mv #{site_path} #{site_path}-#{ts}.old ; fi"
|
33
38
|
run "if [ -h #{site_path} ]; then mv #{site_path} #{site_path}-#{ts}.old ; fi"
|
34
39
|
run "ln -s #{deploy_to}/current/public #{public_html}/#{application}"
|
35
|
-
|
40
|
+
upload File.join(File.dirname(__FILE__), "database.locaweb.yml"), "#{deploy_to}/etc/database.yml"
|
41
|
+
upload File.join(File.dirname(__FILE__), "locaweb_backup.rb"), "#{deploy_to}/etc/locaweb_backup.rb"
|
42
|
+
upload File.join(File.dirname(__FILE__), "ssh_helper.rb"), "#{deploy_to}/etc/ssh_helper.rb"
|
36
43
|
|
37
44
|
<% if config.mode == 'git' %>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
3.times { puts "" }
|
45
|
+
# ssh keygen
|
46
|
+
run "test -f ~/.ssh/id_rsa || ruby #{deploy_to}/etc/ssh_helper.rb /home/#{user}/.ssh/id_rsa #{domain} #{user}"
|
47
|
+
|
48
|
+
unless has_git
|
49
|
+
2.times { puts "" }
|
44
50
|
puts "==============================================================="
|
45
51
|
puts "Rode os seguintes comandos depois de criar seu repositorio Git:"
|
46
52
|
puts ""
|
47
|
-
puts " git remote add
|
48
|
-
puts " git push
|
53
|
+
puts " git remote add #{remote_repo} #{repository}"
|
54
|
+
puts " git push #{remote_repo} #{branch}"
|
49
55
|
puts "==============================================================="
|
50
|
-
|
56
|
+
2.times { puts "" }
|
51
57
|
end
|
52
58
|
<% end %>
|
53
59
|
end
|
@@ -80,11 +86,48 @@ namespace :log do
|
|
80
86
|
end
|
81
87
|
|
82
88
|
namespace :db do
|
83
|
-
desc "Faz o backup remoto do banco de dados MySQL
|
89
|
+
desc "Faz o backup remoto e download do banco de dados MySQL"
|
84
90
|
task :backup, :roles => :db do
|
85
|
-
backup_rb ||= "#{deploy_to}/
|
86
|
-
run "if [ -f #{backup_rb} ]; then ruby #{backup_rb} #{deploy_to} ; fi"
|
91
|
+
backup_rb ||= "#{deploy_to}/etc/locaweb_backup.rb"
|
92
|
+
run "if [ -f #{backup_rb} ]; then ruby #{backup_rb} backup #{deploy_to} ; fi"
|
87
93
|
get "#{deploy_to}/etc/dump.tar.gz", "dump.tar.gz"
|
88
94
|
run "rm #{deploy_to}/etc/dump.tar.gz"
|
89
95
|
end
|
96
|
+
|
97
|
+
desc "Faz o upload e o restore remoto do banco de dados MySQL"
|
98
|
+
task :restore, :roles => :db do
|
99
|
+
unless File.exists?("dump.tar.gz")
|
100
|
+
puts "Backup dump.tar.gz nao encontrado"
|
101
|
+
exit 0
|
102
|
+
end
|
103
|
+
backup_rb ||= "#{deploy_to}/etc/locaweb_backup.rb"
|
104
|
+
upload "dump.tar.gz", "#{deploy_to}/etc/dump.tar.gz"
|
105
|
+
run "if [ -f #{backup_rb} ]; then ruby #{backup_rb} restore #{deploy_to} ; fi"
|
106
|
+
end
|
107
|
+
|
108
|
+
desc "Apaga todas as tabelas do banco de dados [CUIDADO! OPERACAO SEM VOLTA!]"
|
109
|
+
task :drop_all, :roles => :db do
|
110
|
+
backup_rb ||= "#{deploy_to}/etc/locaweb_backup.rb"
|
111
|
+
run "if [ -f #{backup_rb} ]; then ruby #{backup_rb} drop_all #{deploy_to} ; fi"
|
112
|
+
end
|
90
113
|
end
|
114
|
+
|
115
|
+
namespace :ssh do
|
116
|
+
desc "Faz upload da sua chave publica"
|
117
|
+
task :upload_key, :roles => :app do
|
118
|
+
public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
119
|
+
unless File.exists?(public_key_path)
|
120
|
+
puts %{
|
121
|
+
Chave publica nao encontrada em #{public_key_path}
|
122
|
+
Crie sua chave - sem passphrase - com o comando:
|
123
|
+
ssh_keygen -t rsa
|
124
|
+
}
|
125
|
+
exit 0
|
126
|
+
end
|
127
|
+
run "test -d ~/.ssh || mkdir -m 755 ~/.ssh"
|
128
|
+
upload public_key_path, "~/.ssh"
|
129
|
+
run "test -f ~/.ssh/authorized_keys || touch ~/.ssh/authorized_keys"
|
130
|
+
run "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"
|
131
|
+
run "chmod 755 ~/.ssh/authorized_keys"
|
132
|
+
end
|
133
|
+
end
|
data/templates/deploy.rb.erb
CHANGED
@@ -60,7 +60,14 @@
|
|
60
60
|
set :user, "<%= config.usuario %>"
|
61
61
|
set :domain, "<%= config.dominio %>"
|
62
62
|
set :application, "<%= config.app_name %>"
|
63
|
+
<% if config.mode == 'git' %>
|
64
|
+
set :repository, "<%= config.remote_git %>"
|
65
|
+
set :remote_repo, '<%= config.remote_repo %>'
|
66
|
+
set :branch, '<%= config.branch %>'
|
67
|
+
set :git_repo, "/home/#{user}/repo/#{application}.git"
|
68
|
+
<% else %>
|
63
69
|
set :repository, "<%= config.local_path %>"
|
70
|
+
<% end %>
|
64
71
|
<% if config.ssh_key_path %>
|
65
72
|
ssh_options[:keys] = File.expand_path("<%= config.ssh_key_path %>") # apenas descomente se tiver chave
|
66
73
|
<% end %>
|
@@ -79,23 +86,18 @@ set :runner, nil
|
|
79
86
|
set :use_sudo, false
|
80
87
|
set :no_release, true
|
81
88
|
|
82
|
-
<% if config.mode == 'git' %>
|
83
|
-
set :git_repo, "/home/#{user}/repo/#{application}.git"
|
84
|
-
|
89
|
+
<% if config.mode == 'git' %>
|
85
90
|
set :scm, :git
|
86
|
-
set :branch, 'local'
|
87
91
|
set :deploy_via, :remote_cache
|
88
92
|
set :git_shallow_clone, 1
|
89
|
-
set :
|
90
|
-
set :remote, "akitaonrails1"
|
93
|
+
set :remote, user
|
91
94
|
set :scm_verbose, true
|
92
|
-
set :keep_releases, 5
|
93
95
|
<% else %>
|
94
|
-
set :scm, :none
|
96
|
+
set :scm, :none
|
95
97
|
set :deploy_via, :copy
|
96
|
-
set :copy_exclude, %w(.git/* .svn/* log/* tmp/*)
|
97
|
-
set :keep_releases, 5
|
98
98
|
<% end %>
|
99
|
+
set :copy_exclude, %w(.git/* .svn/* log/* tmp/* .gitignore)
|
100
|
+
set :keep_releases, 5
|
99
101
|
|
100
102
|
ssh_options[:username] = user
|
101
103
|
ssh_options[:paranoid] = false
|
data/templates/locaweb_backup.rb
CHANGED
@@ -1,19 +1,30 @@
|
|
1
1
|
#!/usr/bin/env ruby -wKU
|
2
2
|
require 'yaml'
|
3
|
+
require 'erb'
|
3
4
|
|
4
|
-
deploy_to
|
5
|
-
cfg = YAML::load(
|
6
|
-
exit
|
5
|
+
operation, deploy_to = ARGV
|
6
|
+
cfg = YAML::load(ERB.new(IO.read("#{deploy_to}/etc/database.yml")).result)
|
7
|
+
exit 0 unless cfg['production'] # sai se nao encontrar o arquivo de banco
|
8
|
+
prd = cfg['production']
|
9
|
+
mysql_opts = "-u #{prd['username']} -p#{prd['password']} -h #{prd['host']} #{prd['database']}"
|
10
|
+
mysql_opts_no_data = "-u #{prd['username']} -p#{prd['password']} -h #{prd['host']} --add-drop-table --no-data #{prd['database']}"
|
7
11
|
|
8
|
-
|
9
|
-
cmd_mysql = "mysqldump -u #{cfg['username']} -p#{cfg['password']} -h #{cfg['host']} #{cfg['database']} > #{deploy_to}/etc/dump.sql"
|
10
|
-
cmd_compress = "cd #{deploy_to}/etc && tar cvfz dump.tar.gz dump.sql"
|
11
|
-
cmd_rm = "rm #{deploy_to}/etc/dump.sql"
|
12
|
+
commands = []
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
case operation
|
15
|
+
when 'backup'
|
16
|
+
commands << "mysqldump #{mysql_opts} > #{deploy_to}/etc/dump.sql"
|
17
|
+
commands << "cd #{deploy_to}/etc && tar cvfz dump.tar.gz dump.sql"
|
18
|
+
commands << "rm #{deploy_to}/etc/dump.sql"
|
19
|
+
when 'restore'
|
20
|
+
commands << "cd #{deploy_to}/etc && if [ -f dump.tar.gz ]; then tar xvfz dump.tar.gz dump.sql ; fi"
|
21
|
+
commands << "if [ -f #{deploy_to}/etc/dump.sql ]; then mysql -u #{mysql_opts} < #{deploy_to}/etc/dump.sql && rm #{deploy_to}/etc/dump.sql ; fi"
|
22
|
+
when 'drop_all'
|
23
|
+
commands << "mysqldump #{mysql_opts_no_data} | grep ^DROP | mysql #{mysql_opts}"
|
24
|
+
end
|
25
|
+
|
26
|
+
commands.each do |cmd|
|
27
|
+
puts "executando: #{cmd.gsub(cfg['password'], 'xxxxxxxx')}"
|
28
|
+
`#{cmd}`
|
29
|
+
end
|
30
|
+
puts "operacao #{operation} finalizada."
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: akitaonrails-locarails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Akita
|
@@ -11,8 +11,25 @@ cert_chain: []
|
|
11
11
|
|
12
12
|
date: 2008-08-19 00:00:00 -07:00
|
13
13
|
default_executable: locarails
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: capistrano
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.0.0
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: highline
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: "0"
|
32
|
+
version:
|
16
33
|
description: A maneira mais simples para instalar aplicacoes Rails na hospedagem Linux da Locaweb.
|
17
34
|
email: fabio.akita@locaweb.com.br
|
18
35
|
executables:
|