geordi 0.2.3 → 0.2.5
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/README.md +16 -4
- data/bin/dump-for +61 -0
- data/bin/dumple +51 -33
- data/bin/install-gems-remotely.sh +6 -1
- data/bin/power-deploy +4 -0
- data/bin/power-rake +1 -1
- data/bin/{remove-execute-flags → remove-executable-flags} +2 -2
- data/bin/shell-for +42 -28
- data/lib/geordi/version.rb +1 -1
- metadata +10 -8
data/README.md
CHANGED
@@ -23,7 +23,7 @@ More information at http://makandra.com/notes/807-shell-script-to-quickly-switch
|
|
23
23
|
b
|
24
24
|
-
|
25
25
|
|
26
|
-
|
26
|
+
Runs the given command under `bundle exec` if a `Gemfile` is present in your working directory. If no `Gemfile` is present just runs the given command:
|
27
27
|
|
28
28
|
b spec spec/models
|
29
29
|
|
@@ -43,7 +43,7 @@ More information at http://makandra.com/notes/1008-dump-your-database-with-dumpl
|
|
43
43
|
install-gems-remotely
|
44
44
|
---------------------
|
45
45
|
|
46
|
-
Installs all gems in your `Gemfile.lock
|
46
|
+
Installs all gems in your `Gemfile.lock`, as well as vendored gems, to the given host:
|
47
47
|
|
48
48
|
install-gems-remotely my.server.com
|
49
49
|
|
@@ -63,7 +63,7 @@ This script is considered legacy and will be removed eventually. You should [fix
|
|
63
63
|
power-rake
|
64
64
|
----------
|
65
65
|
|
66
|
-
Runs the given rake task in each Rails environment in `development`, `test`, `cucumber`, `performance`, if
|
66
|
+
Runs the given rake task in each Rails environment in `development`, `test`, `cucumber`, `performance`, if existing:
|
67
67
|
|
68
68
|
power-rake db:migrate
|
69
69
|
|
@@ -83,9 +83,11 @@ More information at http://makandra.com/notes/520-create-a-remote-branch-in-git
|
|
83
83
|
remove-executable-flags
|
84
84
|
-----------------------
|
85
85
|
|
86
|
-
Recursively removes executable flags from files in the working directory that probably shouldn't have them
|
86
|
+
Recursively removes executable flags from files in the working directory that probably shouldn't have them (like Ruby, HTML, CSS, image, Rake and similar files).
|
87
87
|
|
88
88
|
remove-executable-flags
|
89
|
+
|
90
|
+
More information at http://makandra.com/notes/659-recursively-remove-unnecessary-execute-flags
|
89
91
|
|
90
92
|
|
91
93
|
shell-for
|
@@ -97,3 +99,13 @@ Opens an SSH shell on the given [Capistrano multistage](https://github.com/capis
|
|
97
99
|
|
98
100
|
More information at http://makandra.com/notes/1209-script-to-open-an-ssh-shell-to-a-capistrano-deployment-target
|
99
101
|
|
102
|
+
|
103
|
+
dump-for
|
104
|
+
--------
|
105
|
+
|
106
|
+
Dumps the database on your server for a given [Capistrano multistage](https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension) deployment target, then copies the dump to your project root.
|
107
|
+
|
108
|
+
dump-for production
|
109
|
+
|
110
|
+
More information at http://makandra.com/notes/1237-script-to-create-and-copy-a-production-dump-to-your-project-root
|
111
|
+
|
data/bin/dump-for
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
def unquote(line)
|
4
|
+
if line
|
5
|
+
line.match(/["'](.*)["']/)
|
6
|
+
$1
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_project_root
|
11
|
+
current = Dir.pwd
|
12
|
+
until (File.exists? 'Capfile')
|
13
|
+
Dir.chdir '..'
|
14
|
+
return nil if current == Dir.pwd
|
15
|
+
current = Dir.pwd
|
16
|
+
end
|
17
|
+
@project_root = current
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
require 'rubygems'
|
22
|
+
require 'net/ssh'
|
23
|
+
|
24
|
+
stage = ARGV.shift
|
25
|
+
|
26
|
+
find_project_root or raise 'Call me from inside a Rails project'
|
27
|
+
|
28
|
+
data = if stage
|
29
|
+
deploy_file = Dir['config/deploy/*.rb'].find do |file|
|
30
|
+
file.match(/\/#{stage}.rb$/)
|
31
|
+
end
|
32
|
+
deploy_file or raise "Unknown stage: #{stage}"
|
33
|
+
|
34
|
+
File.open(deploy_file).readlines
|
35
|
+
else
|
36
|
+
[]
|
37
|
+
end + File.open("config/deploy.rb").readlines
|
38
|
+
|
39
|
+
user = unquote data.find{ |line| line =~ /^set :user,/}
|
40
|
+
server = unquote data.find{ |line| line =~ /^server / }
|
41
|
+
deploy_to = unquote data.find{ |line| line =~ /^set :deploy_to,/}
|
42
|
+
environment = unquote data.find{ |line| line =~ /^set :rails_env,/}
|
43
|
+
(user and server and deploy_to and environment) or raise "Could not find required data (user, server, deploy target and environment).\nUsage: dump-for DEPLOYMENT_STAGE"
|
44
|
+
|
45
|
+
path = deploy_to + "/current"
|
46
|
+
if path.match /#\{.*\}/
|
47
|
+
puts %(NOTE: "#{path}" is not a valid path.)
|
48
|
+
puts %(NOTE: You will need to fetch the dump yourself.)
|
49
|
+
raise ""
|
50
|
+
end
|
51
|
+
|
52
|
+
command = %(ssh #{user}@#{server} -t "cd #{path} && dumple #{environment} --for_download")
|
53
|
+
system command
|
54
|
+
|
55
|
+
puts "Downloading dump_for_download..."
|
56
|
+
exec "scp #{user}@#{server}:~/dumps/dump_for_download.dump #{@project_root}"
|
57
|
+
|
58
|
+
rescue Exception => e
|
59
|
+
$stderr.puts e.message
|
60
|
+
exit 1
|
61
|
+
end
|
data/bin/dumple
CHANGED
@@ -11,46 +11,64 @@ if ARGV.include?("-i")
|
|
11
11
|
exit
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
###
|
15
15
|
|
16
|
+
require "yaml"
|
16
17
|
config_path = 'config/database.yml'
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
18
|
+
|
19
|
+
begin
|
20
|
+
# go to project root
|
21
|
+
current = Dir.pwd
|
22
|
+
until (File.exists? config_path)
|
23
|
+
Dir.chdir '..'
|
24
|
+
if current == Dir.pwd
|
25
|
+
if fail_gently
|
26
|
+
puts "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
|
27
|
+
puts "* *"
|
28
|
+
puts "* *"
|
29
|
+
puts "* Script is not called from inside a Rails project, *"
|
30
|
+
puts "* *"
|
31
|
+
puts "* THE DATABASE WILL NOT BE DUMPED. *"
|
32
|
+
puts "* *"
|
33
|
+
puts "* *"
|
34
|
+
puts "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
|
35
|
+
sleep 5
|
36
|
+
exit
|
37
|
+
else
|
38
|
+
raise "Call me from inside a Rails project."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
current = Dir.pwd
|
32
42
|
end
|
33
|
-
end
|
34
|
-
config = YAML::load(File.open(config_path))
|
35
43
|
|
36
|
-
|
37
|
-
config = config[environment] or raise "No production environment found. Please do `dumple [env_name]`"
|
44
|
+
config = YAML::load(File.open(config_path))
|
38
45
|
|
39
|
-
|
40
|
-
|
41
|
-
Dir.mkdir(dump_dir)
|
42
|
-
system("chmod 700 #{dump_dir}")
|
43
|
-
end
|
44
|
-
dump_path = "#{dump_dir}/#{config['database']}_#{Time.now.strftime("%Y%m%d_%H%M%S")}.dump"
|
46
|
+
environment = ARGV.reject{ |arg| arg[0].chr == '-' }.first || 'production'
|
47
|
+
config = config[environment] or raise "No #{environment} database found.\nUsage: dumple ENVIRONMENT"
|
45
48
|
|
46
|
-
|
47
|
-
|
49
|
+
dump_dir = "#{ENV['HOME']}/dumps"
|
50
|
+
unless File.directory?(dump_dir)
|
51
|
+
Dir.mkdir(dump_dir)
|
52
|
+
system("chmod 700 #{dump_dir}")
|
53
|
+
end
|
54
|
+
|
55
|
+
if ARGV.find{ |arg| arg == '--for_download'}
|
56
|
+
dump_path = "#{dump_dir}/dump_for_download.dump"
|
57
|
+
else
|
58
|
+
dump_path = "#{dump_dir}/#{config['database']}_#{Time.now.strftime("%Y%m%d_%H%M%S")}.dump"
|
59
|
+
end
|
48
60
|
|
49
|
-
|
50
|
-
|
61
|
+
puts
|
62
|
+
puts "Dumping database for \"#{environment}\" environment ..."
|
51
63
|
|
52
|
-
|
64
|
+
system "mysqldump -u\"#{config['username']}\" -p\"#{config['password']}\" #{config['database']} -r #{dump_path}"
|
65
|
+
system "chmod 600 #{dump_path}"
|
53
66
|
|
54
|
-
|
55
|
-
puts
|
67
|
+
dump_size_kb = (File.size(dump_path) / 1024).round
|
56
68
|
|
69
|
+
puts "Dumped to #{dump_path} (#{dump_size_kb} KB)"
|
70
|
+
puts
|
71
|
+
rescue Exception => e
|
72
|
+
$stderr.puts e.message
|
73
|
+
exit 1
|
74
|
+
end
|
@@ -1,4 +1,9 @@
|
|
1
1
|
#!/bin/sh
|
2
|
+
if [ -z "$1" ]; then
|
3
|
+
echo "Please specify the remote server name"
|
4
|
+
exit 1
|
5
|
+
fi
|
6
|
+
mkdir -p tmp
|
2
7
|
if ls vendor/gems/*/*.gemspec > /dev/null 2>&1; then
|
3
8
|
tar cf tmp/gemfiles_for_remote_install Gemfile Gemfile.lock vendor/gems/*/*.gemspec
|
4
9
|
else
|
@@ -8,4 +13,4 @@ scp tmp/gemfiles_for_remote_install $1:~
|
|
8
13
|
stty_orig=`stty -g`
|
9
14
|
stty -echo
|
10
15
|
ssh -t $1 "mkdir /tmp/install_gems; mv gemfiles_for_remote_install /tmp/install_gems; cd /tmp/install_gems; tar xf gemfiles_for_remote_install; bundle install; rm -rf /tmp/install_gems"
|
11
|
-
stty $stty_orig
|
16
|
+
stty $stty_orig
|
data/bin/power-deploy
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
stage = ARGV[0]
|
4
|
+
puts "NOTE: This Script is considered legacy and will be removed eventually."
|
5
|
+
puts "NOTE: You should fix your deploy scripts (see http://makandra.com/notes/1176-which-capistrano-hooks-to-use-for-events-to-happen-on-both-cap-deploy-and-cap-deploy-migrations)"
|
6
|
+
puts "Note: and use `cap deploy:migrations` (see http://makandra.com/notes/1000-deploy-and-migrate-with-a-single-capistrano-command) instead."
|
7
|
+
puts
|
4
8
|
exec "cap #{stage} deploy && cap #{stage} deploy:migrate && cap #{stage} deploy:restart"
|
data/bin/power-rake
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
puts "Removing
|
3
|
+
puts "Removing executable-flags:"
|
4
4
|
for pattern in %w[*.rb *.html *.erb *.haml *.yml *.css *.sass *.rake *.png *.jpg *.gif *.pdf *.txt *.rdoc Rakefile VERSION README Capfile]
|
5
5
|
puts "- #{pattern}"
|
6
|
-
`find . -name "#{pattern}" -exec chmod -x {}
|
6
|
+
`find . -name "#{pattern}" -exec chmod -x {} \ `
|
7
7
|
end
|
8
8
|
puts "Done."
|
data/bin/shell-for
CHANGED
@@ -1,42 +1,56 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
def
|
4
|
-
line
|
3
|
+
def unquote(line)
|
4
|
+
if line
|
5
|
+
line.match(/["'](.*)["']/)
|
6
|
+
$1
|
7
|
+
end
|
5
8
|
end
|
6
9
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@specific = File.open(deploy_file).readlines
|
16
|
-
@for_all = File.open("config/deploy.rb").readlines
|
17
|
-
end
|
18
|
-
|
19
|
-
def build_command
|
20
|
-
path = quoted_text(@deploy_to) + "/current"
|
21
|
-
|
22
|
-
@command = "ssh #{quoted_text(@user)}@#{quoted_text(@server)}"
|
23
|
-
@command += %( -t "cd #{path} && bash --login") unless path.match /#\{/
|
10
|
+
def find_project_root
|
11
|
+
current = Dir.pwd
|
12
|
+
until (File.exists? 'Capfile')
|
13
|
+
Dir.chdir '..'
|
14
|
+
return nil if current == Dir.pwd
|
15
|
+
current = Dir.pwd
|
16
|
+
end
|
17
|
+
current
|
24
18
|
end
|
25
19
|
|
26
20
|
begin
|
27
|
-
|
21
|
+
stage = ARGV.shift
|
22
|
+
|
23
|
+
find_project_root or raise 'Call me from inside a Rails project'
|
28
24
|
|
29
|
-
|
30
|
-
|
25
|
+
data = if stage
|
26
|
+
deploy_file = Dir['config/deploy/*.rb'].find do |file|
|
27
|
+
file.match(/\/#{stage}.rb$/)
|
28
|
+
end
|
29
|
+
deploy_file or raise "Unknown stage: #{stage}"
|
30
|
+
|
31
|
+
File.open(deploy_file).readlines
|
32
|
+
else
|
33
|
+
[]
|
34
|
+
end + File.open("config/deploy.rb").readlines
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
@deploy_to = @specific.find{ |line| line =~ /^set :deploy_to, /} || @for_all.find{ |line| line =~ /^set :deploy_to, / }
|
36
|
+
user = unquote data.find{ |line| line =~ /^set :user, /}
|
37
|
+
server = unquote data.find{ |line| line =~ /^server / }
|
38
|
+
deploy_to = unquote data.find{ |line| line =~ /^set :deploy_to, /}
|
36
39
|
|
37
|
-
|
40
|
+
(user and server and deploy_to) or raise "Could not find required data (user, server and deploy-target).\nUsage: shell-for DEPLOYMENT_STAGE"
|
38
41
|
|
39
|
-
|
42
|
+
path = deploy_to + "/current"
|
43
|
+
command = %(ssh #{user}@#{server})
|
44
|
+
|
45
|
+
if path.match /#\{.*\}/
|
46
|
+
puts %(NOTE: "#{path}" is not a valid path.)
|
47
|
+
puts %(NOTE: Connecting to deploy user home.)
|
48
|
+
sleep 2
|
49
|
+
else
|
50
|
+
command += %( -t "cd #{path} && bash --login")
|
51
|
+
end
|
52
|
+
|
53
|
+
exec command
|
40
54
|
|
41
55
|
rescue Exception => e
|
42
56
|
$stderr.puts e.message
|
data/lib/geordi/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geordi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 5
|
10
|
+
version: 0.2.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Henning Koch
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-30 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -25,13 +25,14 @@ email:
|
|
25
25
|
executables:
|
26
26
|
- apache-site
|
27
27
|
- b
|
28
|
+
- dump-for
|
28
29
|
- dumple
|
29
30
|
- install-gems-remotely
|
30
31
|
- install-gems-remotely.sh
|
31
32
|
- power-deploy
|
32
33
|
- power-rake
|
33
34
|
- remotify-local-branch
|
34
|
-
- remove-
|
35
|
+
- remove-executable-flags
|
35
36
|
- shell-for
|
36
37
|
extensions: []
|
37
38
|
|
@@ -44,13 +45,14 @@ files:
|
|
44
45
|
- Rakefile
|
45
46
|
- bin/apache-site
|
46
47
|
- bin/b
|
48
|
+
- bin/dump-for
|
47
49
|
- bin/dumple
|
48
50
|
- bin/install-gems-remotely
|
49
51
|
- bin/install-gems-remotely.sh
|
50
52
|
- bin/power-deploy
|
51
53
|
- bin/power-rake
|
52
54
|
- bin/remotify-local-branch
|
53
|
-
- bin/remove-
|
55
|
+
- bin/remove-executable-flags
|
54
56
|
- bin/shell-for
|
55
57
|
- geordi.gemspec
|
56
58
|
- lib/geordi/version.rb
|
@@ -84,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
86
|
requirements: []
|
85
87
|
|
86
88
|
rubyforge_project: geordi
|
87
|
-
rubygems_version: 1.
|
89
|
+
rubygems_version: 1.5.2
|
88
90
|
signing_key:
|
89
91
|
specification_version: 3
|
90
92
|
summary: Collection of command line tools we use in our daily work with Ruby, Rails and Linux at makandra.
|