railshoster 0.4.0 → 0.5.0

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.textile CHANGED
@@ -19,7 +19,7 @@ h3. 0.0.3
19
19
  * Enhanced error messages for invalid application tokens.
20
20
  * Initial README.
21
21
 
22
- h3. 0.4.0
22
+ h3. 0.0.4
23
23
 
24
24
  * 0.4.0 has become 0.1.0 since features have been added.
25
25
 
@@ -49,4 +49,8 @@ h3. 0.2.1
49
49
 
50
50
  h3. 0.3.0
51
51
 
52
- * SSH publick key file recognition and upload to authorized_keys to enable a passwordless deploy.rb.
52
+ * SSH publick key file recognition and upload to authorized_keys to enable a passwordless deploy.rb.
53
+
54
+ h3. 0.4.0
55
+
56
+ * Now also works for RailsHoster VPS (virtual Servers).
data/ROADMAP.textile CHANGED
@@ -5,12 +5,10 @@ h2. 0.0.1
5
5
 
6
6
  h2. 1.0.0
7
7
 
8
- * Remove password from deploy.rb by using an ssh connect at init. Find and copy lokal ssh public key to remot/authorized_keys.
9
8
  * Solve database.yml issue - mysql or mysql2. Decide using bundler?
10
9
 
11
10
  h3. Product Backlog
12
11
 
13
- * RailsHoster VPS Deployments
14
12
  * Mailer-Configuration
15
13
  * Multistage Deployments - Deploy an app to a shared hosting (e.g. dev) and to a VPS (production).
16
14
 
@@ -4,7 +4,7 @@ module Railshoster
4
4
  module Capistrano
5
5
 
6
6
  # Strategy to generate a capistrano config for a shared hosting
7
- class H
7
+ class Config
8
8
 
9
9
  #### Static
10
10
 
@@ -5,7 +5,7 @@ require 'fileutils'
5
5
  require 'net/sftp'
6
6
  require 'sane'
7
7
 
8
- require File.expand_path(File.join(File.dirname(__FILE__), '/capistrano/h'))
8
+ require File.expand_path(File.join(File.dirname(__FILE__), '/capistrano/config'))
9
9
 
10
10
  module Railshoster
11
11
 
@@ -38,8 +38,8 @@ module Railshoster
38
38
  #TODO Add connection test -> If there's already access -> no need to do this
39
39
  selected_key = Railshoster::Utilities.select_public_ssh_key
40
40
  app_hash["public_ssh_key"] = Pathname.new(selected_key[:path]).basename.to_s.gsub(".pub", "")
41
-
42
- create_remote_authorized_key_file_from_public_ssh_key(app_hash, selected_key)
41
+
42
+ create_remote_authorized_key_file_from_app_hash(app_hash, selected_key)
43
43
  deployrb_str = create_deployrb(app_hash)
44
44
  write_deploy_rb(deployrb_str)
45
45
  capify_project
@@ -77,30 +77,59 @@ module Railshoster
77
77
  end
78
78
  end
79
79
 
80
- def create_remote_authorized_key_file_from_public_ssh_key(app_hash, key)
81
- remote_dot_ssh_path = ".ssh"
80
+ def create_remote_authorized_key_file_from_app_hash(app_hash, key)
81
+ if app_hash["t"].eql?("h") then
82
+
83
+ # For a hosting package the password is the deploy user's password
84
+ create_remote_authorized_key_file(app_hash["h"], app_hash["u"], app_hash["p"], key)
85
+ elsif app_hash["t"].eql?("v") then
86
+
87
+ # For a vps the given password it the root user's password -> Register key for root user
88
+ create_remote_authorized_key_file(app_hash["h"], "root", app_hash["p"], key)
89
+
90
+ # Also register the public key to enable key access to the deploy user
91
+ # This means that the
92
+ create_remote_authorized_key_file(app_hash["h"], "root", app_hash["p"], key, "/home/#{app_hash['u']}/.ssh", app_hash['u'])
93
+ else
94
+ exit_now!("Initialization aborted. Invalid product type: #{app_hash['t']}.", -1)
95
+ end
96
+ end
97
+
98
+ # Creates a remote authorized keys file for the given public key
99
+ #
100
+ # === Parameters
101
+ # +host+:: SSH host to connect to
102
+ # +password+:: SSH password
103
+ # +key+:: Public key hash. Have a look at +Railshoster::Utilities.select_public_ssh_key+ for more details about the key structure.
104
+ # +remote_dot_ssh_path+:: Remote path to the user's .ssh path. Usually this is relative to the ssh-users's home path. Use absolute path names to avoid that.
105
+ # +target_username+:: Optional. If this parameter is set .ssh directory and the authorized_keys file will be assegned to the user with the given username.
106
+ def create_remote_authorized_key_file(host, ssh_username, password, key, remote_dot_ssh_path = ".ssh", target_username = nil)
82
107
  remote_authorized_keys_path = remote_dot_ssh_path + "/authorized_keys"
83
- Net::SFTP.start(app_hash["h"], app_hash["u"], :password => app_hash["p"]) do |sftp|
108
+ Net::SFTP.start(host, ssh_username, :password => password) do |sftp|
109
+
110
+ #TODO Smarter way to determine home directory
111
+ stats = sftp.stat!("/home/#{target_username}") if target_username
112
+
84
113
  begin
85
114
  sftp.mkdir!(remote_dot_ssh_path)
115
+ sftp.setstat(remote_dot_ssh_path, :uid => stats.uid, :gid => stats.gid) if target_username
86
116
  rescue Net::SFTP::StatusException => e
87
117
  # Most likely the .ssh folder already exists raise again if not.
88
118
  raise e unless e.code == 4
89
119
  end
90
120
  sftp.upload!(key[:path].to_s, remote_authorized_keys_path)
121
+ sftp.setstat(remote_authorized_keys_path, :uid => stats.uid, :gid => stats.gid) if target_username
91
122
  end
92
- end
123
+ end
93
124
 
94
125
  def create_deployrb(app_hash)
95
126
  deployrb_str = ""
96
127
 
97
128
  # Choose the further process depending on the application type by applying a strategy pattern.
98
129
  case app_hash["t"].to_sym
99
- when :h
130
+ when :h, :v
100
131
  # Shared Hosting Deployments
101
- deployrb_str = Railshoster::Capistrano::H.render_deploy_rb_to_s(app_hash)
102
- # Later also support VPS Deployments
103
- # when :v
132
+ deployrb_str = Railshoster::Capistrano::Config.render_deploy_rb_to_s(app_hash)
104
133
  else
105
134
  raise UnsupportedApplicationTypeError.new
106
135
  end
@@ -1,3 +1,3 @@
1
1
  module Railshoster
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -79,7 +79,12 @@ namespace :railshoster do
79
79
  desc "Show the url of your app."
80
80
  task :appurl do
81
81
  puts "\nThe default RailsHoster.com URL of your app is:"
82
- puts "\nhttp://#{user}-<%= app["aid"] %>.<%= app["h"]%>"
82
+
83
+ <% if app["t"].eql?("h") then %>
84
+ puts "\nhttp://#{user}-<%= app["aid"] %>.<%= app["h"]%>"
85
+ <% else %>
86
+ puts "\nhttp://#{user}.<%= app["h"]%>"
87
+ <% end %>
83
88
  puts "\n"
84
89
  end
85
90
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railshoster
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Julian Fischer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-15 00:00:00 Z
18
+ date: 2011-11-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler
@@ -202,8 +202,7 @@ files:
202
202
  - lib/railshoster/bad_application_json_hash_error.rb
203
203
  - lib/railshoster/bad_appliction_token_error.rb
204
204
  - lib/railshoster/capify_project_failed_error.rb
205
- - lib/railshoster/capistrano/h.rb
206
- - lib/railshoster/capistrano/v.rb
205
+ - lib/railshoster/capistrano/config.rb
207
206
  - lib/railshoster/command.rb
208
207
  - lib/railshoster/deploy_command.rb
209
208
  - lib/railshoster/error.rb
@@ -1,6 +0,0 @@
1
- module Railshoster
2
- module Capistrano
3
- class V
4
- end
5
- end
6
- end