rails_pwnerer 0.5.12 → 0.5.14

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ v0.5.14. App-directed gem installation (because Rails 2.1.0 doesn't quite work yet).
2
+
3
+ v0.5.13. Writable dirs are created if they didn't exist before.
4
+
1
5
  v0.5.12. Scaffolding sets up sshd for tunneling.
2
6
 
3
7
  v0.5.11. Added check for Rails application root on SVN checkout.
@@ -12,12 +12,13 @@ class RailsPwnage::App::ClusterConfig
12
12
  pwnerer_group = group_for_username(pwnerer_user)
13
13
 
14
14
  writable_dirs = %w(log tmp public)
15
- if app_config[:writable_dirs]
15
+ if app_config[:writable_dirs]
16
16
  writable_dirs += app_config[:writable_dirs].split ','
17
17
  end
18
18
 
19
19
  Dir.chdir app_config[:app_path] do
20
20
  writable_dirs.each do |writable_dir|
21
+ FileUtils.mkpath writable_dir unless File.exists? writable_dir
21
22
  FileUtils.chown_R(pwnerer_uid, pwnerer_group, writable_dir)
22
23
  end
23
24
  end
@@ -35,6 +35,8 @@ class RailsPwnage::App::Config
35
35
  app_db[:max_request_mb] = 48
36
36
  # comma-separated directories that should be writable by the application user
37
37
  app_db[:writable_dirs] = ''
38
+ # comma-separated gems that should be installed for the application
39
+ app_db[:gems] = ''
38
40
 
39
41
  RailsPwnage::Config.flush_db app_db
40
42
  return app_path
@@ -4,8 +4,21 @@ class RailsPwnage::App::Gems
4
4
  include RailsPwnage::Base
5
5
 
6
6
  def update(app_name, instance_name)
7
- app_path = RailsPwnage::Config[app_name, instance_name][:app_path]
8
- Dir.chdir app_path do
7
+ app_config = RailsPwnage::Config[app_name, instance_name]
8
+
9
+ # Phase 1: app-directed install
10
+ if app_config[:gems]
11
+ install_gems = app_config[:gems].split(',')
12
+ install_gems.each do |gem_name|
13
+ #begin
14
+ install_gem gem_name unless gem_exists? gem_name
15
+ #rescue Exception
16
+ #end
17
+ end
18
+ end
19
+
20
+ # Phase 2: rails install
21
+ Dir.chdir app_config[:app_path] do
9
22
  # install the gems needed by the app
10
23
  system "rake gems:install RAILS_ENV=production"
11
24
  end
@@ -15,6 +15,17 @@ module RailsPwnage::Base
15
15
  def update_gems()
16
16
  system "gem update --system"
17
17
  end
18
+
19
+ # checks if a gem exists
20
+ def gem_exists?(gem_name)
21
+ begin
22
+ output = `gem specification --local #{gem_name} 2> /dev/null`
23
+ return output =~ /$\-\-\- \!ruby\/object\:Gem\:\:Specification/
24
+ rescue
25
+ # we get here if gem exits with an error code
26
+ return false
27
+ end
28
+ end
18
29
 
19
30
  # locates the main file in a gem (used to locate the gem)
20
31
  def path_to_gem(gem_name, discard_suffix = '')
@@ -22,7 +33,7 @@ module RailsPwnage::Base
22
33
 
23
34
  # method 1: peek inside rubygems' treasure chest
24
35
  begin
25
- gem_pattern = File.join `gem environment gemdir`.strip, 'gems', gem_name
36
+ gem_pattern = (File.join `gem environment gemdir`.strip, 'gems', gem_name) + '-'
26
37
  gem_path = Dir.glob(gem_pattern + '*').max
27
38
  rescue
28
39
  gem_path = nil
@@ -1,11 +1,11 @@
1
1
 
2
- # Gem::Specification for Rails_pwnerer-0.5.12
2
+ # Gem::Specification for Rails_pwnerer-0.5.14
3
3
  # Originally generated by Echoe
4
4
 
5
5
  --- !ruby/object:Gem::Specification
6
6
  name: rails_pwnerer
7
7
  version: !ruby/object:Gem::Version
8
- version: 0.5.12
8
+ version: 0.5.14
9
9
  platform: ruby
10
10
  authors:
11
11
  - Victor Costan
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.5.12
4
+ version: 0.5.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Costan