rails_pwnerer 0.1 → 0.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/CHANGELOG +2 -0
- data/Manifest +6 -0
- data/README +24 -7
- data/lib/pwnage/app/cluster_config.rb +45 -0
- data/lib/pwnage/app/database.rb +50 -0
- data/lib/pwnage/app/main.rb +9 -0
- data/lib/pwnage/app/nginx_config.rb +63 -0
- data/lib/pwnage/app/svn.rb +33 -0
- data/lib/pwnage/base/dirs.rb +19 -5
- data/lib/pwnage/base/startup.rb +12 -0
- data/lib/pwnage/config/main.rb +68 -0
- data/lib/pwnage/executor.rb +4 -0
- data/lib/pwnage/scaffolds/dirs.rb +7 -5
- data/lib/pwnage/scaffolds/hook_mongrels.rb +1 -1
- data/lib/rails_pwnage.rb +8 -0
- data/rails_pwnerer.gemspec +4 -4
- metadata +13 -1
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
bin/rpwn
|
2
2
|
CHANGELOG
|
3
|
+
lib/pwnage/app/cluster_config.rb
|
4
|
+
lib/pwnage/app/database.rb
|
5
|
+
lib/pwnage/app/main.rb
|
6
|
+
lib/pwnage/app/nginx_config.rb
|
7
|
+
lib/pwnage/app/svn.rb
|
3
8
|
lib/pwnage/base/dirs.rb
|
4
9
|
lib/pwnage/base/gems.rb
|
5
10
|
lib/pwnage/base/packages.rb
|
6
11
|
lib/pwnage/base/startup.rb
|
7
12
|
lib/pwnage/base.rb
|
13
|
+
lib/pwnage/config/main.rb
|
8
14
|
lib/pwnage/executor.rb
|
9
15
|
lib/pwnage/scaffolds/dirs.rb
|
10
16
|
lib/pwnage/scaffolds/gems.rb
|
data/README
CHANGED
@@ -1,9 +1,26 @@
|
|
1
|
-
|
2
|
-
ruby driver is the very powerful DSL (domain-specific language) that TEM procedures are compiled from.
|
1
|
+
I want this gem to be Pure Pwnage with Rails.
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
I built +rails_pwnerer+ because I hate the messy process of putting a rails
|
4
|
+
application into production. I don't enjoy following 10-page guides, so I'd
|
5
|
+
much rather having ruby do that for me.
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
Right now, +rails_pwnerer+ assumes a fresh Ubuntu 7.10 installation. You're
|
8
|
+
welcome to test/update for other systems, and I'll be happy to merge patches,
|
9
|
+
or add you to the RubyForge project.
|
10
|
+
|
11
|
+
|
12
|
+
Quick start with +rails_pwnerer+:
|
13
|
+
|
14
|
+
1) Install rubygems:
|
15
|
+
sudo apt-get install rubygems
|
16
|
+
|
17
|
+
2) Install +rails_pwnerer+:
|
18
|
+
sudo gem install rails_pwnerer
|
19
|
+
|
20
|
+
3) Get your server production-ready:
|
21
|
+
sudo rpwn den00b
|
22
|
+
|
23
|
+
4) Install your application:
|
24
|
+
sudo rpwn install svn+ssh://your.repo/path/to/your_application
|
25
|
+
|
26
|
+
That's it. Reboot, and you're ready.
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# builds the mongrel cluster configuration
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class RailsPwnage::App::ClusterConfig
|
6
|
+
include RailsPwnage::Base
|
7
|
+
|
8
|
+
def fix_permissions(app_name)
|
9
|
+
pwnerer_user = RailsPwnage::Config.pwnerer_user
|
10
|
+
pwnerer_uid = uid_for_username(pwnerer_user)
|
11
|
+
pwnerer_group = group_for_username(pwnerer_user)
|
12
|
+
|
13
|
+
with_dir(RailsPwnage::Config.path_to(app_name)) do
|
14
|
+
%w(log tmp public).each do |writable_dir|
|
15
|
+
FileUtils.chown_R(pwnerer_uid, pwnerer_group, writable_dir)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def configure_mongrels(app_name)
|
21
|
+
app_path = RailsPwnage::Config.path_to app_name
|
22
|
+
pwnerer_user = RailsPwnage::Config.pwnerer_user
|
23
|
+
pwnerer_group = group_for_username(pwnerer_user)
|
24
|
+
|
25
|
+
instances = RailsPwnage::Config.app_instances(app_name)
|
26
|
+
first_port = RailsPwnage::Config.app_port0(app_name)
|
27
|
+
|
28
|
+
with_dir(app_path) do
|
29
|
+
# create the mongrel_cluster configuration
|
30
|
+
system "mongrel_rails cluster::configure -e production -N #{instances} -p #{first_port} -a 127.0.0.1 -c #{app_path} --user #{pwnerer_user} --group #{pwnerer_group}"
|
31
|
+
|
32
|
+
# copy the configuration to the launch directory
|
33
|
+
FileUtils.cp('config/mongrel_cluster.yml', "#{RailsPwnage::Config.path_to :mongrel_configs}#{File::SEPARATOR}#{app_name}.yml")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup(app_name)
|
38
|
+
configure_mongrels app_name
|
39
|
+
fix_permissions app_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.setup(app_name)
|
43
|
+
self.new.setup(app_name)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# sets up the application database
|
2
|
+
|
3
|
+
class RailsPwnage::App::Database
|
4
|
+
include RailsPwnage::Base
|
5
|
+
|
6
|
+
# creates the mysql database for the application
|
7
|
+
def create_databse(app_name)
|
8
|
+
db_name = RailsPwnage::Config.app_dbname(app_name)
|
9
|
+
db_user = RailsPwnage::Config.app_db_user(app_name)
|
10
|
+
db_pass = RailsPwnage::Config.app_db_password(app_name)
|
11
|
+
|
12
|
+
with_dir(RailsPwnage::Config.path_to(app_name)) do
|
13
|
+
# put together the creation script
|
14
|
+
sql_commands = <<ENDSQL
|
15
|
+
CREATE DATABASE #{db_name};
|
16
|
+
GRANT ALL ON #{db_name}.* TO '#{db_user}'@'localhost' IDENTIFIED BY '#{db_pass}' WITH GRANT OPTION;
|
17
|
+
ENDSQL
|
18
|
+
|
19
|
+
# run it
|
20
|
+
File.open('tmp/create_db.sql', 'w') { |f| f.write sql_commands }
|
21
|
+
system "mysql -uroot < tmp/create_db.sql"
|
22
|
+
|
23
|
+
# cleanup
|
24
|
+
File.delete('tmp/create_db.sql')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# configures rails to use the database in the production environment
|
29
|
+
def configure_rails(app_name)
|
30
|
+
# TODO: write rails configuration file
|
31
|
+
end
|
32
|
+
|
33
|
+
# migrates the database so it's ready
|
34
|
+
def migrate_database(app_name)
|
35
|
+
with_dir(RailsPwnage::Config.path_to(app_name)) do
|
36
|
+
# now migrate the database
|
37
|
+
system "rake db:migrate RAILS_ENV=production"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup(app_name)
|
42
|
+
create_databse app_name
|
43
|
+
configure_rails app_name
|
44
|
+
migrate_database app_name
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.setup(app_name)
|
48
|
+
self.new.setup(app_name)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# builds the nginx configuration
|
2
|
+
|
3
|
+
class RailsPwnage::App::NginxConfig
|
4
|
+
include RailsPwnage::Base
|
5
|
+
|
6
|
+
# writes the nginx configuration for this server
|
7
|
+
def config_nginx(app_name)
|
8
|
+
first_port = RailsPwnage::Config.app_port0(app_name)
|
9
|
+
hostname_filter = RailsPwnage::Config.app_servername(app_name)
|
10
|
+
|
11
|
+
File.open(RailsPwnage::Config.path_to(:nginx_configs) + File::SEPARATOR + app_name, 'w') do |f|
|
12
|
+
# link to the mongrels
|
13
|
+
f << " upstream #{app_name} {\n"
|
14
|
+
RailsPwnage::Config.app_instances(app_name).times do |instance|
|
15
|
+
f << " server 127.0.0.1:#{first_port + instance};\n"
|
16
|
+
end
|
17
|
+
f << " }\n\n"
|
18
|
+
|
19
|
+
# server configuration -- big and ugly
|
20
|
+
f << <<NGINX_CONFIG
|
21
|
+
server {
|
22
|
+
listen 80;
|
23
|
+
#{(hostname_filter.nil? ? '' : "server_name " + hostname_filter + ";")}
|
24
|
+
root #{RailsPwnage::Config.path_to(app_name)};
|
25
|
+
client_max_body_size #{RailsPwnage::Config.app_max_request_mb(app_name)}M;
|
26
|
+
location / {
|
27
|
+
proxy_set_header X-Real-IP $remote_addr;
|
28
|
+
proxy_set_header Host $host;
|
29
|
+
proxy_redirect false;
|
30
|
+
proxy_connect_timeout 2;
|
31
|
+
proxy_read_timeout 86400;
|
32
|
+
|
33
|
+
if (-f $request_filename/index.html) {
|
34
|
+
rewrite (.*) $1/index.html break;
|
35
|
+
}
|
36
|
+
if (-f $request_filename.html) {
|
37
|
+
rewrite (.*) $1.html break;
|
38
|
+
}
|
39
|
+
if (!-f $request_filename) {
|
40
|
+
proxy_pass http://#{app_name};
|
41
|
+
break;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
NGINX_CONFIG
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# removes the default configuration stub (so nginx doesn't stumble upon it)
|
50
|
+
def remove_nginx_stub
|
51
|
+
stub_file = RailsPwnage::Config.path_to(:nginx_configs) + File::SEPARATOR + 'default'
|
52
|
+
File.delete(stub_file) if File.exists?(stub_file)
|
53
|
+
end
|
54
|
+
|
55
|
+
def setup(app_name)
|
56
|
+
config_nginx(app_name)
|
57
|
+
remove_nginx_stub
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.setup(app_name)
|
61
|
+
self.new.setup(app_name)
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# checks out the application
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class RailsPwnage::App::Svn
|
6
|
+
include RailsPwnage::Base
|
7
|
+
|
8
|
+
def checkout(svn_path)
|
9
|
+
app_name = File.basename(svn_path)
|
10
|
+
|
11
|
+
prod_apps = RailsPwnage::Config.path_to :prod_apps
|
12
|
+
with_dir(prod_apps) do
|
13
|
+
# checkout application
|
14
|
+
system "svn co #{svn_path} #{app_name}"
|
15
|
+
end
|
16
|
+
|
17
|
+
return app_name
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup(svn_path)
|
21
|
+
app_name = checkout(svn_path)
|
22
|
+
|
23
|
+
# TODO: fetch configuration, feed to system
|
24
|
+
|
25
|
+
return app_name
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.setup(svn_path)
|
29
|
+
self.new.setup(svn_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
# TODO: uninstallation
|
33
|
+
end
|
data/lib/pwnage/base/dirs.rb
CHANGED
@@ -4,7 +4,7 @@ require 'etc'
|
|
4
4
|
|
5
5
|
module RailsPwnage::Base
|
6
6
|
# runs the associated block within a certain directory
|
7
|
-
def
|
7
|
+
def with_dir(dir)
|
8
8
|
old_dir = Dir.pwd()
|
9
9
|
Dir.chdir(dir)
|
10
10
|
|
@@ -16,8 +16,22 @@ module RailsPwnage::Base
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# gets the UID associated with the username
|
19
|
-
def
|
20
|
-
passwd_entry = getpwnam(name)
|
19
|
+
def uid_for_username(name)
|
20
|
+
passwd_entry = Etc.getpwnam(name)
|
21
21
|
return (passwd_entry.nil?) ? nil : passwd_entry.uid
|
22
|
-
end
|
23
|
-
|
22
|
+
end
|
23
|
+
|
24
|
+
# gets the GID associated with the username
|
25
|
+
def gid_for_username(name)
|
26
|
+
passwd_entry = Etc.getpwnam(name)
|
27
|
+
return (passwd_entry.nil?) ? nil : passwd_entry.gid
|
28
|
+
end
|
29
|
+
|
30
|
+
# gets the main group of the given user
|
31
|
+
def group_for_username(name)
|
32
|
+
gid = gid_for_username(name)
|
33
|
+
return nil if gid.nil?
|
34
|
+
group_entry = Etc.getgrgid(gid)
|
35
|
+
return (group_entry.nil?) ? nil : group_entry.name
|
36
|
+
end
|
37
|
+
end
|
data/lib/pwnage/base/startup.rb
CHANGED
@@ -16,4 +16,16 @@ module RailsPwnage::Base
|
|
16
16
|
# add to boot sequence
|
17
17
|
system "update-rc.d #{script_name} defaults"
|
18
18
|
end
|
19
|
+
|
20
|
+
def control_boot_script(script_name, action = :restart)
|
21
|
+
path_to_script = "/etc/init.d/#{script_name}"
|
22
|
+
case action
|
23
|
+
when :stop
|
24
|
+
system "#{path_to_script} stop"
|
25
|
+
when :start
|
26
|
+
system "#{path_to_script} start"
|
27
|
+
when :restart
|
28
|
+
system "#{path_to_script} restart"
|
29
|
+
end
|
30
|
+
end
|
19
31
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module RailsPwnage::Config
|
2
|
+
# the path to something important (e.g. :prod_apps --> path to all production applications)
|
3
|
+
def self.path_to(what = :prod)
|
4
|
+
case what
|
5
|
+
when :prod
|
6
|
+
# the directory containing all the production data
|
7
|
+
'/prod'
|
8
|
+
when :prod_apps
|
9
|
+
# the directory containing the production apps
|
10
|
+
'/prod/apps'
|
11
|
+
when :prod_config
|
12
|
+
# the directory containing the config files
|
13
|
+
'/prod/config'
|
14
|
+
when :mongrel_configs
|
15
|
+
# the directory containing the mongrel_cluster config files
|
16
|
+
'/etc/mongrel_cluster'
|
17
|
+
when :nginx_configs
|
18
|
+
# the directory containing the nginx config files
|
19
|
+
'/etc/nginx/sites-enabled'
|
20
|
+
when String
|
21
|
+
# an application
|
22
|
+
self.path_to(:prod_apps) + File::SEPARATOR + what
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# the user which will receive the keys to the production system
|
27
|
+
def self.pwnerer_user
|
28
|
+
'victor'
|
29
|
+
end
|
30
|
+
|
31
|
+
# the number of instances for the given application
|
32
|
+
def self.app_instances(app_name)
|
33
|
+
4
|
34
|
+
end
|
35
|
+
|
36
|
+
# the first internal port for the given application
|
37
|
+
def self.app_port0(app_name)
|
38
|
+
8000
|
39
|
+
end
|
40
|
+
|
41
|
+
# the name of the database for the given application
|
42
|
+
def self.app_dbname(app_name)
|
43
|
+
# NOTE: convention, this doesn't have to change
|
44
|
+
app_name + '_prod'
|
45
|
+
end
|
46
|
+
|
47
|
+
# the datbase user for the given application
|
48
|
+
def self.app_db_user(app_name)
|
49
|
+
# NOTE: convention, this doesn't have to change
|
50
|
+
app_name
|
51
|
+
end
|
52
|
+
|
53
|
+
# the password of the database user for the given application
|
54
|
+
def self.app_db_password(app_name)
|
55
|
+
'superpass'
|
56
|
+
end
|
57
|
+
|
58
|
+
# a DNS name for server-based filtering (multiple apps on the same box)
|
59
|
+
def self.app_servername(app_name)
|
60
|
+
# "#{app_name}.zergling.net"
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
# the maximum request size (megabytes) to be accepted by an application
|
65
|
+
def self.app_max_request_mb(app_name)
|
66
|
+
48
|
67
|
+
end
|
68
|
+
end
|
data/lib/pwnage/executor.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
# sets up the required directory structure
|
2
2
|
|
3
|
+
require 'fileutils'
|
4
|
+
|
3
5
|
class RailsPwnage::Scaffolds::Dirs
|
4
6
|
include RailsPwnage::Base
|
5
7
|
|
6
8
|
# runner
|
7
9
|
def run
|
10
|
+
pwnerer_uid = uid_for_username(RailsPwnage::Config.pwnerer_user)
|
8
11
|
with_dir('/') do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
File.chown(uid_for_username('victor'), nil, 'prod/config')
|
12
|
+
[:prod_apps, :prod_config].map { |k| RailsPwnage::Config.path_to k }.each do |path|
|
13
|
+
FileUtils.mkpath path
|
14
|
+
File.chown(pwnerer_uid, nil, path)
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
data/lib/rails_pwnage.rb
CHANGED
@@ -10,9 +10,17 @@ require 'pwnage/base/gems.rb'
|
|
10
10
|
require 'pwnage/base/packages.rb'
|
11
11
|
require 'pwnage/base/startup.rb'
|
12
12
|
|
13
|
+
require 'pwnage/config/main.rb'
|
14
|
+
|
13
15
|
require 'pwnage/executor.rb'
|
14
16
|
|
15
17
|
require 'pwnage/scaffolds/dirs.rb'
|
16
18
|
require 'pwnage/scaffolds/gems.rb'
|
17
19
|
require 'pwnage/scaffolds/hook_mongrels.rb'
|
18
20
|
require 'pwnage/scaffolds/packages.rb'
|
21
|
+
|
22
|
+
require 'pwnage/app/main.rb'
|
23
|
+
require 'pwnage/app/svn.rb'
|
24
|
+
require 'pwnage/app/database.rb'
|
25
|
+
require 'pwnage/app/cluster_config.rb'
|
26
|
+
require 'pwnage/app/nginx_config.rb'
|
data/rails_pwnerer.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Rails_pwnerer-0.
|
2
|
+
# Gem::Specification for Rails_pwnerer-0.2
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = %q{rails_pwnerer}
|
7
|
-
s.version = "0.
|
7
|
+
s.version = "0.2"
|
8
8
|
|
9
9
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
10
|
|
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.description = %q{Rails deployment tool/hack.}
|
16
16
|
s.email = %q{victor@costan.us}
|
17
17
|
s.executables = ["rpwn"]
|
18
|
-
s.extra_rdoc_files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "README"]
|
19
|
-
s.files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "Manifest", "README", "RUBYFORGE", "rails_pwnerer.gemspec"]
|
18
|
+
s.extra_rdoc_files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "README"]
|
19
|
+
s.files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "Manifest", "README", "RUBYFORGE", "rails_pwnerer.gemspec"]
|
20
20
|
s.has_rdoc = true
|
21
21
|
s.homepage = %q{http://www.costan.us/rails_pwnage}
|
22
22
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rails_pwnerer", "--main", "README"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_pwnerer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.2"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -22,11 +22,17 @@ extensions: []
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- bin/rpwn
|
24
24
|
- CHANGELOG
|
25
|
+
- lib/pwnage/app/cluster_config.rb
|
26
|
+
- lib/pwnage/app/database.rb
|
27
|
+
- lib/pwnage/app/main.rb
|
28
|
+
- lib/pwnage/app/nginx_config.rb
|
29
|
+
- lib/pwnage/app/svn.rb
|
25
30
|
- lib/pwnage/base/dirs.rb
|
26
31
|
- lib/pwnage/base/gems.rb
|
27
32
|
- lib/pwnage/base/packages.rb
|
28
33
|
- lib/pwnage/base/startup.rb
|
29
34
|
- lib/pwnage/base.rb
|
35
|
+
- lib/pwnage/config/main.rb
|
30
36
|
- lib/pwnage/executor.rb
|
31
37
|
- lib/pwnage/scaffolds/dirs.rb
|
32
38
|
- lib/pwnage/scaffolds/gems.rb
|
@@ -38,11 +44,17 @@ extra_rdoc_files:
|
|
38
44
|
files:
|
39
45
|
- bin/rpwn
|
40
46
|
- CHANGELOG
|
47
|
+
- lib/pwnage/app/cluster_config.rb
|
48
|
+
- lib/pwnage/app/database.rb
|
49
|
+
- lib/pwnage/app/main.rb
|
50
|
+
- lib/pwnage/app/nginx_config.rb
|
51
|
+
- lib/pwnage/app/svn.rb
|
41
52
|
- lib/pwnage/base/dirs.rb
|
42
53
|
- lib/pwnage/base/gems.rb
|
43
54
|
- lib/pwnage/base/packages.rb
|
44
55
|
- lib/pwnage/base/startup.rb
|
45
56
|
- lib/pwnage/base.rb
|
57
|
+
- lib/pwnage/config/main.rb
|
46
58
|
- lib/pwnage/executor.rb
|
47
59
|
- lib/pwnage/scaffolds/dirs.rb
|
48
60
|
- lib/pwnage/scaffolds/gems.rb
|