capistrano-rvm 0.0.1 → 0.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/README.md +88 -17
- data/Rakefile +0 -1
- data/capistrano-rvm.gemspec +13 -12
- data/lib/capistrano-rvm.rb +0 -2
- data/lib/capistrano/rvm.rb +1 -0
- data/lib/capistrano/tasks/rvm.rake +78 -0
- metadata +18 -14
- data/.gitignore +0 -18
- data/LICENSE +0 -22
- data/lib/capistrano-rvm/capistrano_integration.rb +0 -60
- data/lib/capistrano-rvm/version.rb +0 -5
data/README.md
CHANGED
@@ -1,41 +1,112 @@
|
|
1
|
-
# Capistrano::
|
1
|
+
# Capistrano::RVM
|
2
2
|
|
3
|
-
|
3
|
+
RVM support for Capistrano 3.x
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
|
9
|
+
# Gemfile
|
10
|
+
gem 'capistrano', github: 'capistrano/capistrano', branch: 'v3'
|
11
|
+
gem 'capistrano-rvm', github: "capistrano/rvm"
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
13
|
-
$ bundle
|
15
|
+
$ bundle --binstubs
|
16
|
+
$ cap install
|
14
17
|
|
15
|
-
|
18
|
+
## Usage
|
16
19
|
|
17
|
-
|
20
|
+
Require in Capfile to use the default task:
|
18
21
|
|
19
|
-
|
22
|
+
# Capfile
|
23
|
+
require 'capistrano/rvm'
|
24
|
+
|
25
|
+
And you should be good to go!
|
26
|
+
|
27
|
+
## Configuration
|
28
|
+
|
29
|
+
Set those in the stage file dependant on your server configuration:
|
30
|
+
|
31
|
+
# stage file (staging.rb, production.rb or else)
|
32
|
+
set :rvm_type, :user
|
33
|
+
set :rvm_ruby_version, '2.0.0-p247'
|
34
|
+
set :rvm_custom_path, '~/.myveryownrvm'
|
35
|
+
|
36
|
+
### RVM path selection: `:rvm_type`
|
37
|
+
|
38
|
+
Valid options are:
|
39
|
+
* `:auto` (default): just tries to find the correct path.
|
40
|
+
`/usr/local/rvm` wins over `~/.rvm`
|
41
|
+
* `:system`: defines the RVM path to `/usr/local/rvm`
|
42
|
+
* `:user`: defines the RVM path to `~/.rvm`
|
43
|
+
* `:mixed`: defines the RVM path to `/usr/local/rvm` for rvm and `~/.rvm` for wrapped commands
|
44
|
+
|
45
|
+
### Ruby and gemset selection: `:rvm_ruby_version`
|
46
|
+
|
47
|
+
By default the Ruby and gemset is used which is returned by `rvm current` on
|
48
|
+
the target host.
|
49
|
+
|
50
|
+
You can omit the ruby patch level from `:rvm_ruby_version` if you want, and
|
51
|
+
capistrano will choose the most recent patch level for that version of ruby:
|
52
|
+
|
53
|
+
set :rvm_ruby_version '2.0.0'
|
54
|
+
|
55
|
+
If you are using an rvm gemset, just specify it after your ruby_version:
|
56
|
+
|
57
|
+
set :rvm_ruby_version, '2.0.0-p247@mygemset'
|
58
|
+
|
59
|
+
or
|
60
|
+
|
61
|
+
set :rvm_ruby_version, '2.0.0@mygemset'
|
62
|
+
|
63
|
+
|
64
|
+
### Custom RVM path: `:rvm_custom_path`
|
65
|
+
|
66
|
+
If you have a custom RVM setup with a different path then expected, you have
|
67
|
+
to define a custom RVM path to tell capistrano where it is.
|
68
|
+
|
69
|
+
|
70
|
+
## Restrictions
|
71
|
+
|
72
|
+
Capistrano can't (yet) use rvm to install rubies or create gemsets, so on the
|
73
|
+
servers you are deploying to, you will have to manually use rvm to install the
|
74
|
+
proper ruby and create the gemset.
|
75
|
+
|
76
|
+
|
77
|
+
## How it works
|
78
|
+
|
79
|
+
This gem adds a new task `rvm:hook` before `deploy:starting`. It uses the `rvm
|
80
|
+
wrapper` command to create wrapper scripts for this application that use the
|
81
|
+
desired ruby and gemset. These wrapper scripts are then used by capistrano
|
82
|
+
when it wants to run `rake`, `gem`, `bundle`, or `ruby`.
|
83
|
+
|
84
|
+
|
85
|
+
## Check your configuration
|
86
|
+
|
87
|
+
If you want to check your configuration you can use the `rvm:check` task to
|
88
|
+
get information about the RVM version and ruby which would be used for
|
89
|
+
deployment.
|
90
|
+
|
91
|
+
$ cap production rvm:check
|
20
92
|
|
21
|
-
Add this after you define rvm_ruby_string:
|
22
93
|
|
23
|
-
|
94
|
+
## Custom tasks which rely on RVM/Ruby
|
24
95
|
|
25
|
-
|
96
|
+
When building custom tasks which need a the corrent ruby and gemset, all you
|
97
|
+
have to do is run the `rvm:hook` task before your own task. This will create
|
98
|
+
the necessary wrappers and handles the execution of the ruby-related commands.
|
99
|
+
This is only necessary if your task is *not* *after* the `deploy:starting` task.
|
26
100
|
|
27
|
-
|
28
|
-
cap rvm:create_gemset # Creates the gemset to use
|
29
|
-
cap rvm:default_ruby # sets as default current ruby version
|
30
|
-
cap rvm:install # Installs rvm
|
31
|
-
cap rvm:install_bundler # Install bundler gem
|
32
|
-
cap rvm:install_ruby # Installs ruby version specified in rvm_ruby_st...
|
101
|
+
before :my_custom_task, 'rvm:hook'
|
33
102
|
|
103
|
+
The hook can be called multiple times per `cap` run - it only creates the
|
104
|
+
wrappers once.
|
34
105
|
|
35
106
|
## Contributing
|
36
107
|
|
37
108
|
1. Fork it
|
38
109
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
39
|
-
3. Commit your changes (`git commit -am '
|
110
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
40
111
|
4. Push to the branch (`git push origin my-new-feature`)
|
41
112
|
5. Create new Pull Request
|
data/Rakefile
CHANGED
data/capistrano-rvm.gemspec
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
4
|
|
4
5
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Edwin Cruz"]
|
6
|
-
gem.email = ["softr8@gmail.com"]
|
7
|
-
gem.description = %q{Capistrano tasks to manage rvm commands}
|
8
|
-
gem.summary = %q{Some tasks to install rvm, ruby and bundler without pain}
|
9
|
-
gem.homepage = ""
|
10
|
-
|
11
|
-
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
-
gem.files = `git ls-files`.split("\n")
|
13
|
-
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
6
|
gem.name = "capistrano-rvm"
|
7
|
+
gem.version = '0.0.2'
|
8
|
+
gem.authors = ["Kir Shatrov"]
|
9
|
+
gem.email = ["shatrov@me.com"]
|
10
|
+
gem.description = %q{RVM integration for Capistrano}
|
11
|
+
gem.summary = %q{RVM integration for Capistrano}
|
12
|
+
gem.homepage = "https://github.com/capistrano/rvm"
|
13
|
+
|
14
|
+
gem.files = `git ls-files`.split($/)
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
16
|
gem.require_paths = ["lib"]
|
16
|
-
gem.version = Capistrano::Rvm::VERSION
|
17
17
|
|
18
|
-
gem.
|
18
|
+
gem.add_dependency 'capistrano'
|
19
|
+
|
19
20
|
end
|
data/lib/capistrano-rvm.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path("../tasks/rvm.rake", __FILE__)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
RVM_SYSTEM_PATH = "/usr/local/rvm"
|
2
|
+
RVM_USER_PATH = "~/.rvm"
|
3
|
+
|
4
|
+
def bundler_loaded?
|
5
|
+
Gem::Specification::find_all_by_name('capistrano-bundler').any?
|
6
|
+
end
|
7
|
+
|
8
|
+
SSHKit.config.command_map = Hash.new do |hash, key|
|
9
|
+
if fetch(:rvm_map_bins).include?(key.to_s)
|
10
|
+
hash[key] = "#{fetch(:rvm_bins_path)}/bin/#{fetch(:application)}_#{key}"
|
11
|
+
elsif key.to_s == "rvm"
|
12
|
+
hash[key] = "#{fetch(:rvm_path)}/bin/rvm"
|
13
|
+
else
|
14
|
+
hash[key] = key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :deploy do
|
19
|
+
after :starting, 'rvm:hook'
|
20
|
+
end
|
21
|
+
|
22
|
+
namespace :rvm do
|
23
|
+
desc "Runs the RVM hook - use it before any custom tasks if necessary"
|
24
|
+
task :hook do
|
25
|
+
unless fetch(:rvm_hooked)
|
26
|
+
invoke :'rvm:init'
|
27
|
+
invoke :'rvm:create_wrappers'
|
28
|
+
set :rvm_hooked, true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Prints the RVM and Ruby version on the target host"
|
33
|
+
task :check do
|
34
|
+
on roles(:all) do
|
35
|
+
puts capture(:rvm, "version")
|
36
|
+
puts capture(:rvm, "current")
|
37
|
+
puts capture(:ruby, "--version")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
before :check, 'rvm:hook'
|
41
|
+
|
42
|
+
task :init do
|
43
|
+
on roles(:all) do
|
44
|
+
rvm_path = fetch(:rvm_custom_path)
|
45
|
+
rvm_path ||= case fetch(:rvm_type)
|
46
|
+
when :auto
|
47
|
+
if test("[ -d #{RVM_SYSTEM_PATH} ]")
|
48
|
+
RVM_SYSTEM_PATH
|
49
|
+
else
|
50
|
+
RVM_USER_PATH
|
51
|
+
end
|
52
|
+
when :system, :mixed
|
53
|
+
RVM_SYSTEM_PATH
|
54
|
+
else # :user
|
55
|
+
RVM_USER_PATH
|
56
|
+
end
|
57
|
+
set :rvm_path, rvm_path
|
58
|
+
set :rvm_bins_path, fetch(:rvm_type) == :mixed ? RVM_USER_PATH : rvm_path
|
59
|
+
|
60
|
+
rvm_ruby_version = fetch(:rvm_ruby_version)
|
61
|
+
rvm_ruby_version ||= capture(:rvm, "current")
|
62
|
+
set :rvm_ruby_version, rvm_ruby_version
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
task :create_wrappers do
|
67
|
+
on roles(:all) do
|
68
|
+
execute :rvm, "wrapper #{fetch(:rvm_ruby_version)} #{fetch(:application)} #{fetch(:rvm_map_bins).join(" ")}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
namespace :load do
|
74
|
+
task :defaults do
|
75
|
+
set :rvm_map_bins, bundler_loaded? ? %w{bundle gem rake ruby} : %w{gem rake ruby}
|
76
|
+
set :rvm_type, :auto
|
77
|
+
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-rvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
-
|
8
|
+
- Kir Shatrov
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,24 +21,27 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: RVM integration for Capistrano
|
26
31
|
email:
|
27
|
-
-
|
32
|
+
- shatrov@me.com
|
28
33
|
executables: []
|
29
34
|
extensions: []
|
30
35
|
extra_rdoc_files: []
|
31
36
|
files:
|
32
|
-
- .gitignore
|
33
37
|
- Gemfile
|
34
|
-
- LICENSE
|
35
38
|
- README.md
|
36
39
|
- Rakefile
|
37
40
|
- capistrano-rvm.gemspec
|
38
41
|
- lib/capistrano-rvm.rb
|
39
|
-
- lib/capistrano
|
40
|
-
- lib/capistrano
|
41
|
-
homepage:
|
42
|
+
- lib/capistrano/rvm.rb
|
43
|
+
- lib/capistrano/tasks/rvm.rake
|
44
|
+
homepage: https://github.com/capistrano/rvm
|
42
45
|
licenses: []
|
43
46
|
post_install_message:
|
44
47
|
rdoc_options: []
|
@@ -58,8 +61,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
61
|
version: '0'
|
59
62
|
requirements: []
|
60
63
|
rubyforge_project:
|
61
|
-
rubygems_version: 1.8.
|
64
|
+
rubygems_version: 1.8.23
|
62
65
|
signing_key:
|
63
66
|
specification_version: 3
|
64
|
-
summary:
|
67
|
+
summary: RVM integration for Capistrano
|
65
68
|
test_files: []
|
69
|
+
has_rdoc:
|
data/.gitignore
DELETED
data/LICENSE
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2012 Edwin Cruz
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require "capistrano"
|
2
|
-
require "capistrano/version"
|
3
|
-
|
4
|
-
module CapistranoResque
|
5
|
-
class CapistranoIntegration
|
6
|
-
def self.load_into(capistrano_config)
|
7
|
-
capistrano_config.load do
|
8
|
-
|
9
|
-
namespace :rvm do
|
10
|
-
|
11
|
-
set :ruby_version, rvm_ruby_string.split('@').first
|
12
|
-
set :gemset_name, rvm_ruby_string.split('@')[1] || application
|
13
|
-
set :tmp_ruby_string, rvm_ruby_string
|
14
|
-
|
15
|
-
desc "Installs rvm, ruby and bundler"
|
16
|
-
task :default do
|
17
|
-
install
|
18
|
-
install_ruby
|
19
|
-
install_bundler
|
20
|
-
create_gemset
|
21
|
-
end
|
22
|
-
|
23
|
-
desc "Installs rvm"
|
24
|
-
task :install, :except => {:no_release => true} do
|
25
|
-
set :rvm_ruby_string, ''
|
26
|
-
run "RVM=`rvm | grep 'RVM'` ; if [ -z \"$RVM\" ] ; then bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) ; fi", shell: 'bash -l'
|
27
|
-
set :rvm_ruby_string, tmp_ruby_string
|
28
|
-
end
|
29
|
-
|
30
|
-
desc "installs ruby version specified in rvm_ruby_string"
|
31
|
-
task :install_ruby, :except => {:no_release => true} do
|
32
|
-
set :rvm_ruby_string, ''
|
33
|
-
run "RUBY_INSTALLED=`rvm list | grep '#{ruby_version}'` ; if [ -z \"$RUBY_INSTALLED\" ]; then rvm install #{ruby_version} ; fi"
|
34
|
-
set :rvm_ruby_string, tmp_ruby_string
|
35
|
-
end
|
36
|
-
|
37
|
-
desc "sets as default current ruby version"
|
38
|
-
task :default_ruby, :except => {:no_release => true} do
|
39
|
-
run "rvm --default #{ruby_version}"
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "install bundler gem"
|
43
|
-
task :install_bundler, :except => {:no_release => true} do
|
44
|
-
run "if [ -z \"`gem list | grep bundler`\" ] ; then gem install bundler --no-rdoc --no-ri ; fi "
|
45
|
-
end
|
46
|
-
|
47
|
-
task :create_gemset, :except => {:no_release => true} do
|
48
|
-
set :rvm_ruby_string, ruby_version
|
49
|
-
run "rvm gemset create #{gemset_name}"
|
50
|
-
set :rvm_ruby_string, tmp_ruby_string
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
if Capistrano::Configuration.instance
|
59
|
-
CapistranoResque::CapistranoIntegration.load_into(Capistrano::Configuration.instance)
|
60
|
-
end
|