railshoster 0.6.3 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.textile CHANGED
@@ -73,3 +73,19 @@ h3. 0.6.1
73
73
  h3. 0.6.3
74
74
 
75
75
  * Updated message when there's no compatible database gem in Gemfile.lock.
76
+
77
+ h3. 0.6.4
78
+
79
+ * Fixed bug that the database.yml will link to the right release
80
+
81
+ h3. 0.6.5
82
+
83
+ * Process the asset pipeline if it is supported by the rails version
84
+
85
+ h3. 0.6.6
86
+
87
+ * Detection whether the Gemfile and Femfile.lock exists
88
+
89
+ h3. 0.6.7
90
+
91
+ * Get an error if no ssh key or ssh-direcotry exists
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- railshoster (0.6.2)
4
+ railshoster (0.6.6)
5
5
  bundler (>= 1.0.15)
6
6
  capistrano
7
7
  capistrano-ext
@@ -26,7 +26,7 @@ GEM
26
26
  erubis (2.7.0)
27
27
  fakefs (0.4.0)
28
28
  git (1.2.5)
29
- gli (1.3.3)
29
+ gli (1.5.1)
30
30
  highline (1.6.11)
31
31
  json (1.6.5)
32
32
  metaclass (0.0.1)
@@ -39,7 +39,7 @@ GEM
39
39
  net-ssh (2.3.0)
40
40
  net-ssh-gateway (1.1.0)
41
41
  net-ssh (>= 1.99.1)
42
- os (0.9.4)
42
+ os (0.9.6)
43
43
  rspec (2.8.0)
44
44
  rspec-core (~> 2.8.0)
45
45
  rspec-expectations (~> 2.8.0)
@@ -48,7 +48,7 @@ GEM
48
48
  rspec-expectations (2.8.0)
49
49
  diff-lcs (~> 1.1.2)
50
50
  rspec-mocks (2.8.0)
51
- sane (0.24.6)
51
+ sane (0.25.3)
52
52
  os
53
53
 
54
54
  PLATFORMS
data/bin/railshoster CHANGED
@@ -36,6 +36,11 @@ command [:init] do |c|
36
36
  project_git_dir_name = args[0] || cwd
37
37
 
38
38
  if options[:a] then
39
+
40
+ while options[:a].include?('\\n')
41
+ options[:a] = options[:a].gsub('\\n', "\n")
42
+ end
43
+
39
44
  Railshoster::InitCommand.run_by_application_token(project_git_dir_name, options[:a])
40
45
  elsif options[:j] then
41
46
  Railshoster::InitCommand.new(project_git_dir_name, options[:j]).start
@@ -139,4 +144,4 @@ def ask_for_project_dir(current_working_dir)
139
144
  end
140
145
  end
141
146
 
142
- exit GLI.run(ARGV)
147
+ exit GLI.run(ARGV)
@@ -61,6 +61,7 @@ module Railshoster
61
61
  protected
62
62
 
63
63
  def process_application_hash
64
+ expand_app_hash
64
65
  expand_app_hash_product_specifically
65
66
  # e.g. mysql2
66
67
  @app_hash["db_gem"] = get_db_gem.name
@@ -76,23 +77,35 @@ module Railshoster
76
77
  create_remote_authorized_key_file_from_app_hash(@app_hash, selected_key)
77
78
 
78
79
  @app_hash["remote_db_yml"] = "#{@app_hash["deploy_to"]}/shared/config/database.yml"
79
- update_database_yml_db_adapters_via_ssh
80
+
81
+ @app_hash["h"].each do |host|
82
+ update_database_yml_db_adapters_via_ssh(host)
83
+ end
80
84
 
81
85
  deployrb_str = create_deployrb(@app_hash)
82
86
  write_deploy_rb(deployrb_str)
83
87
  capify_project
84
88
  success_message
85
89
  end
90
+
91
+ def expand_app_hash
92
+
93
+ # Turn "h" in to an array unless it's not already one.
94
+ @app_hash["h"] = [ @app_hash["h"] ] unless @app_hash["h"].is_a?(Array)
95
+ end
86
96
 
87
97
  # Add values ot app_hash specific to the given product type.
88
- def expand_app_hash_product_specifically
98
+ def expand_app_hash_product_specifically
89
99
  case @app_hash["t"].to_sym
90
100
  when :h
91
101
  @app_hash["deploy_to"] = "/home/#{@app_hash['u']}/#{@app_hash['a']}"
92
102
  @app_hash["app_url"] = "http://#{@app_hash['u']}-#{@app_hash['aid']}.#{@app_hash['h']}"
93
103
  when :v
94
- @app_hash["deploy_to"] = "/var/www/#{@app_hash['a']}"
104
+ @app_hash["deploy_to"] = "/var/www/#{@app_hash['a']}"
95
105
  @app_hash["app_url"] = "http://#{@app_hash['a']}.#{@app_hash['h']}"
106
+ when :pc
107
+ @app_hash["deploy_to"] = "/var/www/#{@app_hash['a']}"
108
+ @app_hash["app_url"] = "http://#{@app_hash['au']}"
96
109
  else
97
110
  raise UnsupportedApplicationTypeError.new
98
111
  end
@@ -10,7 +10,7 @@ module Railshoster
10
10
  protected
11
11
 
12
12
  # Receive and update a database.yml via SFTP.
13
- def update_database_yml_db_adapters_via_ssh(host = @app_hash["h"], ssh_username = @app_hash["u"], path_to_dbyml = @app_hash["remote_db_yml"])
13
+ def update_database_yml_db_adapters_via_ssh(host, ssh_username = @app_hash["u"], path_to_dbyml = @app_hash["remote_db_yml"])
14
14
  dbyml = ""
15
15
  Net::SFTP.start(host, ssh_username) do |sftp|
16
16
  sftp.file.open(path_to_dbyml) do |file|
@@ -50,4 +50,4 @@ module Railshoster
50
50
  dbyml
51
51
  end
52
52
  end
53
- end
53
+ end
@@ -9,19 +9,26 @@ module Railshoster
9
9
  if app_hash["t"].eql?("h") then
10
10
 
11
11
  # For a hosting package the password is the deploy user's password
12
- create_remote_authorized_key_file(app_hash["h"], app_hash["u"], app_hash["p"], key)
12
+ create_remote_authorized_key_file(app_hash["h"].first, app_hash["u"], app_hash["p"], key)
13
13
  elsif app_hash["t"].eql?("v") then
14
14
 
15
15
  # For a vps the given password it the root user's password -> Register key for root user
16
- create_remote_authorized_key_file(app_hash["h"], "root", app_hash["p"], key)
16
+ create_remote_authorized_key_file(app_hash["h"].first, "root", app_hash["p"], key)
17
17
 
18
18
  # Also register the public key to enable key access to the deploy user
19
- create_remote_authorized_key_file(app_hash["h"], "root", app_hash["p"], key, "/home/#{app_hash['u']}/.ssh", app_hash['u'])
19
+ create_remote_authorized_key_file(app_hash["h"].first, "root", app_hash["p"], key, "/home/#{app_hash['u']}/.ssh", app_hash['u'])
20
+ elsif app_hash["t"].eql?("pc") then
21
+
22
+ # For a private cloud setup we act on several vps
23
+ # but in this case the app_hash stores the deploy user's password not the root password as for vps setups
24
+ app_hash["h"].each do |host|
25
+ create_remote_authorized_key_file(host, app_hash["u"], app_hash["p"], key)
26
+ end
20
27
  else
21
28
  raise("Initialization aborted. Invalid product type: #{app_hash['t']}.")
22
- end
23
- end
24
-
29
+ end
30
+ end
31
+
25
32
  # Creates a remote authorized keys file for the given public key
26
33
  #
27
34
  # === Parameters
@@ -37,7 +44,7 @@ module Railshoster
37
44
 
38
45
  #TODO Smarter way to determine home directory
39
46
  stats = sftp.stat!("/home/#{target_username}") if target_username
40
-
47
+
41
48
  begin
42
49
  sftp.mkdir!(remote_dot_ssh_path)
43
50
  sftp.setstat(remote_dot_ssh_path, :uid => stats.uid, :gid => stats.gid) if target_username
@@ -50,4 +57,4 @@ module Railshoster
50
57
  end
51
58
  end
52
59
  end
53
- end
60
+ end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class NoSshKeyGivenError < ArgumentError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -32,6 +32,11 @@ module Railshoster
32
32
 
33
33
  def self.select_public_ssh_key(ssh_dir = File.join(get_user_home, ".ssh"), options = {:verbose => true})
34
34
  keys = Railshoster::Utilities.find_public_ssh_keys(ssh_dir, options)
35
+
36
+ if keys.size == 0
37
+ raise NoSshKeyGivenError.new("No SSH key given. Use the ssh-keygen command to generate one.")
38
+ end
39
+
35
40
  return keys.first if keys.size == 1
36
41
 
37
42
  puts "\nThere are multiple public ssh keys. Please choose your deploy key:"
@@ -1,3 +1,3 @@
1
1
  module Railshoster
2
- VERSION = "0.6.3"
2
+ VERSION = "0.6.8"
3
3
  end
data/lib/railshoster.rb CHANGED
@@ -8,6 +8,7 @@ require File.join(File.dirname(__FILE__), 'railshoster/capify_project_failed_err
8
8
  require File.join(File.dirname(__FILE__), 'railshoster/bad_application_json_hash_error')
9
9
  require File.join(File.dirname(__FILE__), 'railshoster/bad_appliction_token_error')
10
10
  require File.join(File.dirname(__FILE__), 'railshoster/invalid_public_ssh_key_error')
11
+ require File.join(File.dirname(__FILE__), 'railshoster/no_ssh_key_given_error')
11
12
  require File.join(File.dirname(__FILE__), 'railshoster/init_command')
12
13
  require File.join(File.dirname(__FILE__), 'railshoster/deploy_command')
13
14
  require File.join(File.dirname(__FILE__), 'railshoster/app_url_command')
@@ -75,6 +75,11 @@ describe Railshoster::Utilities do
75
75
  keys.first[:key_data].should eql("AAAAB3NzaC1yc2EAAAADAQABAAABAQDwnMABQ9xWwYdhHaaoNSzFMfXmytWHgkBmDg6v8Fn3oILqOMs99IPd7ChPetDdUWYV2pzLVVKB/kwrcoodRC4H6YHn8xk1oI+gDsv4Yg7ytWwgnDf5zXwWMVQ/IqfOdfxRwS1UCrKL7UsVfIUPzXmkia7PoMoQNnM8jbDRDcfyis3Q1VZ9OjIlM/RfqjH0hGFS95nd6geNwpSbSpg4HxNmfltQ6GpoqclQXX0QdBO+q93sn33JjFPEhYuLvQcoea7Tl0zRY0AGQ9r7562QFlWqMmB+9YXcsZu2OZSk7t5a39jral0jEuEeJB56kb5ZUqRA1DJI5En09/WUPLCYprdb")
76
76
  end
77
77
 
78
+ it "should be 0 ssh-keys if the ssh-directory doesn't exists" do
79
+ keys = Railshoster::Utilities.find_public_ssh_keys(File.join(File.dirname(__FILE__), "..", "..", "fakefs", "fake_dot_ssh", "this_does_not_exist"), :verbose => false)
80
+ keys.size.should be(0)
81
+ end
82
+
78
83
  it "should select a public ssh key without a dialog if there is only a single valid key" do
79
84
  key = Railshoster::Utilities.select_public_ssh_key(File.join(File.dirname(__FILE__), "..", "..", "fakefs", "fake_dot_ssh", "1_valid_key"), :verbose => false)
80
85
  key[:format].should eql("ssh-rsa")
@@ -6,9 +6,46 @@
6
6
  #
7
7
  ###############################
8
8
 
9
- # BITTE ENTFERNEN SIE DIE FOLGENDE ZEILE WENN SIE BUNDLER NICHT BENUTZEN
10
- require 'bundler/capistrano'
9
+ def gemfile_exists?
10
+ File.exists? "Gemfile"
11
+ end
12
+
13
+ def gemfile_lock_exists?
14
+ File.exists? "Gemfile.lock"
15
+ end
16
+
17
+ def rails_version
18
+ if gemfile_exists?
19
+ rails_v = (Proc.new {
20
+ file = File.new("Gemfile", "r")
21
+ while (line = file.gets)
22
+ if line =~ /^\s*gem\s+[\"\']rails[\"\'].+/
23
+ version = line.scan(/(\d+)\.(\d+)\.(\d+)/).first.map {|x| x.to_i}
24
+ end
25
+ end
26
+ file.close
27
+ version
28
+ }).call
29
+ else
30
+ rails_v = nil
31
+ end
32
+ return rails_v
33
+ end
34
+
35
+ def rails_version_supports_assets?
36
+ rails_v = rails_version
37
+ return rails_v != nil && rails_v[0] >= 3 && rails_v[1] >= 1
38
+ end
11
39
 
40
+ if gemfile_exists? && gemfile_lock_exists?
41
+ require 'bundler/capistrano'
42
+ end
43
+
44
+ #### Use the asset-pipeline
45
+
46
+ if rails_version_supports_assets?
47
+ load 'deploy/assets'
48
+ end
12
49
 
13
50
  #### Personal Settings
14
51
  ## User and Password
@@ -54,9 +91,12 @@ set :use_sudo, false
54
91
  set :deploy_to, "<%= app["deploy_to"] %>"
55
92
 
56
93
  # live
57
- role :app, "<%= app["h"]%>"
58
- role :web, "<%= app["h"]%>"
59
- role :db, "<%= app["h"]%>", :primary => true
94
+ <% app["h"].each do |ahost| %>
95
+ role :app, "<%= ahost %>"
96
+ role :web, "<%= ahost %>"
97
+ <% end %>
98
+
99
+ role :db, "<%= app["h"].first %>", :primary => true
60
100
 
61
101
  # railshoster bundler settings
62
102
  set :bundle_flags, "--deployment --binstubs"
@@ -72,7 +112,7 @@ namespace :deploy do
72
112
 
73
113
  desc "Additional Symlinks ( database.yml, etc. )"
74
114
  task :additional_symlink, :roles => :app do
75
- run "ln -sf #{shared_path}/config/database.yml #{current_path}/config/database.yml"
115
+ run "ln -sf #{shared_path}/config/database.yml #{release_path}/config/database.yml"
76
116
  end
77
117
  end
78
118
 
@@ -85,4 +125,10 @@ namespace :railshoster do
85
125
  end
86
126
  end
87
127
 
88
- after "deploy:symlink","deploy:additional_symlink","deploy:migrate"
128
+ if rails_version_supports_assets?
129
+ before "deploy:assets:precompile", "deploy:additional_symlink"
130
+ after "deploy:create_symlink", "deploy:migrate"
131
+ else
132
+ after "deploy:create_symlink", "deploy:additional_symlink", "deploy:migrate"
133
+ end
134
+
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: 1
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 3
10
- version: 0.6.3
9
+ - 8
10
+ version: 0.6.8
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: 2012-03-12 00:00:00 Z
18
+ date: 2012-07-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler
@@ -214,6 +214,7 @@ files:
214
214
  - lib/railshoster/init_ssh_helpers.rb
215
215
  - lib/railshoster/init_validation_helpers.rb
216
216
  - lib/railshoster/invalid_public_ssh_key_error.rb
217
+ - lib/railshoster/no_ssh_key_given_error.rb
217
218
  - lib/railshoster/possibly_not_a_git_repo_error.rb
218
219
  - lib/railshoster/unsupported_application_type_error.rb
219
220
  - lib/railshoster/utilities.rb
@@ -264,22 +265,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
264
265
  requirements: []
265
266
 
266
267
  rubyforge_project: railshoster
267
- rubygems_version: 1.8.6
268
+ rubygems_version: 1.8.10
268
269
  signing_key:
269
270
  specification_version: 3
270
271
  summary: RailsHoster Applicatoin Deployment Suite
271
- test_files:
272
- - spec/fakefs/bundler/mysql/Gemfile.lock
273
- - spec/fakefs/bundler/mysql2/Gemfile.lock
274
- - spec/fakefs/bundler/pg/Gemfile.lock
275
- - spec/fakefs/database_yml/database.mysql.yml
276
- - spec/fakefs/fake_dot_ssh/1_valid_key/bullshit.pub
277
- - spec/fakefs/fake_dot_ssh/1_valid_key/id_rsa.pub
278
- - spec/fakefs/fake_dot_ssh/2_valid_keys/github_rsa.pub
279
- - spec/fakefs/fake_dot_ssh/2_valid_keys/id_dsa.pub
280
- - spec/lib/railshoster/command_spec.rb
281
- - spec/lib/railshoster/init_command_spec.rb
282
- - spec/lib/railshoster/init_database_helpers_spec.rb
283
- - spec/lib/railshoster/init_gem_helpers_spec.rb
284
- - spec/lib/railshoster/utilities_spec.rb
285
- - spec/spec_helper.rb
272
+ test_files: []
273
+