remoting 0.2.14 → 0.2.16
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 +7 -9
- data/VERSION +1 -1
- data/examples/remote.rake +4 -2
- data/lib/generators/remoting/install_generator.rb +16 -0
- data/lib/generators/remoting/recipe.rb +14 -0
- data/recipes/apache.rake +30 -0
- data/recipes/bare.rake +25 -0
- data/recipes/git.rake +36 -0
- data/recipes/precompile_assets_on_deploy.rake +23 -0
- data/recipes/rails.rake +126 -0
- data/recipes/slow_assets_workaround.rake +18 -0
- data/recipes/utils.rake +24 -0
- data/recipes/whenever.rake +11 -0
- data/remoting.gemspec +11 -2
- metadata +12 -3
data/README.md
CHANGED
@@ -116,20 +116,18 @@ task :reload do
|
|
116
116
|
end
|
117
117
|
```
|
118
118
|
|
119
|
-
##
|
119
|
+
## Recipes
|
120
120
|
|
121
121
|
A complete deployment manager (like Capistrano even if probably not as good as it is) can be easily built over *remoting*. Capistrano recipes can be ordinary rake tasks packed as gems. Plus various _deployment strategies_ can be assembled as dependencies of a main `deploy` task.
|
122
122
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
gem 'remoting_server_passenger' # provides 'remoting:server:restart'
|
123
|
+
As from version `0.3.0` **Remoting** added support for recipes with a generator (`rails g remoting:recipe`) that basically installs recipes from [remoting/recipes](https://github.com/mcasimir/remoting/tree/master/recipes) into `lib/tasks/remote`.
|
124
|
+
|
125
|
+
eg.
|
127
126
|
|
128
|
-
# remoting.rake
|
129
|
-
desc "Deploy application on server"
|
130
|
-
task :deploy => ["remoting:scm:push", "remoting:scm:update_remoting_code", "remoting:bundle", "remoting:server:restart"] do
|
131
|
-
end
|
132
127
|
```
|
128
|
+
rails g remoting:recipe rails git bare apache slow_assets_workaround
|
129
|
+
```
|
130
|
+
|
133
131
|
|
134
132
|
## Examples
|
135
133
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.16
|
data/examples/remote.rake
CHANGED
@@ -5,7 +5,8 @@ namespace :remote do
|
|
5
5
|
|
6
6
|
remote('info', config.login) do
|
7
7
|
source "~/.profile"
|
8
|
-
source "
|
8
|
+
source "/usr/local/rvm/scripts/rvm"
|
9
|
+
|
9
10
|
|
10
11
|
which :ruby
|
11
12
|
echo "RUBY VERSION: `ruby --version`"
|
@@ -94,7 +95,8 @@ namespace :remote do
|
|
94
95
|
|
95
96
|
remote('bundle', config.login) do
|
96
97
|
source "~/.profile"
|
97
|
-
source "
|
98
|
+
source "/usr/local/rvm/scripts/rvm"
|
99
|
+
|
98
100
|
rvm :use, config.ruby
|
99
101
|
|
100
102
|
cd config.dest
|
@@ -15,6 +15,22 @@ remote:
|
|
15
15
|
create_file "config/remote.yml", stub
|
16
16
|
|
17
17
|
end
|
18
|
+
|
19
|
+
def create_remote_rake
|
20
|
+
|
21
|
+
create_file "lib/tasks/remote.rake", <<-eos
|
22
|
+
namespace :remote do
|
23
|
+
desc "Deploy application on server"
|
24
|
+
task :deploy => [:push, :bundle, :"assets:compile", :restart] do
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
eos
|
29
|
+
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
|
18
34
|
end
|
19
35
|
end
|
20
36
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Remoting
|
2
|
+
class Recipe < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../../../../recipes', __FILE__)
|
4
|
+
|
5
|
+
argument :names, :as => :array, :required => true, :banner => "RECIPE1 RECIPE2 ..."
|
6
|
+
|
7
|
+
def install_recipe
|
8
|
+
names.each {|name|
|
9
|
+
template "#{name}.rake", Rails.root.join("lib", "tasks", "remote", "#{name}.rake")
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/recipes/apache.rake
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
desc "Restart the server"
|
3
|
+
task :restart do
|
4
|
+
require 'remoting/task'
|
5
|
+
|
6
|
+
remote('restart', config.login) do
|
7
|
+
mkdir '-p', config.dest.join('tmp')
|
8
|
+
touch config.dest.join('tmp', 'restart.txt')
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :apache do
|
14
|
+
task :ensite do
|
15
|
+
require 'remoting/task'
|
16
|
+
remote('ensite', config.login, :interactive => true) do
|
17
|
+
cd "/etc/apache2/sites-enabled"
|
18
|
+
sudo "ln -s #{config.dest.join('config', 'apache.conf')} #{config.app}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
task :reload do
|
23
|
+
require 'remoting/task'
|
24
|
+
|
25
|
+
remote('reload', config.login, :interactive => true) do
|
26
|
+
sudo "/etc/init.d/apache2 reload"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/recipes/bare.rake
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
namespace :bare do
|
3
|
+
|
4
|
+
desc "Initialize a bare git remote"
|
5
|
+
task :setup do
|
6
|
+
require 'remoting/task'
|
7
|
+
repo_location = config.repo.gsub(/^ssh:\/\/[^\/]+/, "")
|
8
|
+
remote('setup', config.login) do
|
9
|
+
mkdir "-p", repo_location
|
10
|
+
cd repo_location
|
11
|
+
git :init, "--bare"
|
12
|
+
git "--bare", "update-server-info"
|
13
|
+
mkdir "-p", config.dest
|
14
|
+
git :config, "core.bare", :false
|
15
|
+
git :config, "core.worktree", config.dest
|
16
|
+
git :config, "receive.denycurrentbranch", :ignore
|
17
|
+
touch "hooks/post-receive"
|
18
|
+
command("echo '#!/bin/sh' >> hooks/post-receive")
|
19
|
+
command("echo git checkout -f >> hooks/post-receive ")
|
20
|
+
chmod "+x", "hooks/post-receive"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/recipes/git.rake
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
|
3
|
+
desc "Commit everything to remote git repository"
|
4
|
+
task :push do
|
5
|
+
require 'remoting/task'
|
6
|
+
|
7
|
+
message = ENV["MESSAGE"] || "commit #{Time.now}"
|
8
|
+
|
9
|
+
local('push') do
|
10
|
+
git :add, "."
|
11
|
+
git :commit, "-a", "-m", "\"#{message}\""
|
12
|
+
git :push, "origin", "+master:refs/heads/master"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Setup git origin"
|
17
|
+
task :init do
|
18
|
+
require 'remoting/task'
|
19
|
+
|
20
|
+
local('init') do
|
21
|
+
git :init
|
22
|
+
git :remote, :add, :origin, config.repo
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Grab changes from remote git repository"
|
27
|
+
task :pull do
|
28
|
+
require 'remoting/task'
|
29
|
+
|
30
|
+
local('pull') do
|
31
|
+
git :pull, :origin, :master
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
namespace :assets do
|
3
|
+
|
4
|
+
desc 'Precompile assets'
|
5
|
+
task :compile do
|
6
|
+
require 'remoting/task'
|
7
|
+
|
8
|
+
remote('rake assets:precompile', config.login) do
|
9
|
+
source "/usr/local/rvm/scripts/rvm"
|
10
|
+
rvm :use, config.ruby
|
11
|
+
cd config.dest
|
12
|
+
command("RAILS_ENV=production bundle exec rake assets:precompile")
|
13
|
+
echo 'restarting ...'
|
14
|
+
mkdir '-p', config.dest.join('tmp')
|
15
|
+
touch config.dest.join('tmp', 'restart.txt')
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
data/recipes/rails.rake
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
|
3
|
+
desc "Run bundle install on the server"
|
4
|
+
task :bundle do
|
5
|
+
require 'remoting/task'
|
6
|
+
|
7
|
+
remote('bundle', config.login) do
|
8
|
+
source "/usr/local/rvm/scripts/rvm"
|
9
|
+
rvm :use, config.ruby
|
10
|
+
|
11
|
+
cd config.dest
|
12
|
+
export "LANG=en_US.UTF-8"
|
13
|
+
command "RAILS_ENV=production", "bundle install", "--without development test", "--deployment"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run rake tasks on server"
|
18
|
+
task :rake, [:invocation] do |t, args|
|
19
|
+
require 'remoting/task'
|
20
|
+
|
21
|
+
invocation = args[:invocation]
|
22
|
+
|
23
|
+
remote('rake', config.login, :interactive => true) do
|
24
|
+
source "/usr/local/rvm/scripts/rvm"
|
25
|
+
rvm :use, config.ruby
|
26
|
+
cd config.dest
|
27
|
+
command("RAILS_ENV=production bundle exec rake #{invocation}")
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
desc "Dump a remote logfile"
|
34
|
+
task :log, [:lines, :filename] do |t, args|
|
35
|
+
require 'remoting/task'
|
36
|
+
|
37
|
+
filename, lines = args.values_at(:lines, :filename)
|
38
|
+
filename ||= "production"
|
39
|
+
filename = "#{filename}.log" unless filename =~ /\.[a-z]+$/
|
40
|
+
|
41
|
+
lines ||= 100
|
42
|
+
|
43
|
+
remote('log', config.login) do
|
44
|
+
cd config.dest
|
45
|
+
tail "-#{lines} log/#{filename}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
task :logs => [:log] do
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
desc "Run tail -f on logfile"
|
54
|
+
task :logtail, [:filename] do |t, args|
|
55
|
+
require 'remoting/task'
|
56
|
+
|
57
|
+
filename= args[:filename]
|
58
|
+
filename ||= "production"
|
59
|
+
filename = "#{filename}.log" unless filename =~ /\.[a-z]+$/
|
60
|
+
|
61
|
+
remote('logtail', config.login) do
|
62
|
+
cd config.dest
|
63
|
+
tail "-f log/#{filename}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
desc "Open a remote console"
|
68
|
+
task :console do
|
69
|
+
require 'remoting/task'
|
70
|
+
|
71
|
+
remote('console', config.login, :interactive => true) do
|
72
|
+
cd config.dest
|
73
|
+
source "/usr/local/rvm/scripts/rvm"
|
74
|
+
bundle :exec, "rails c production"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :db do
|
79
|
+
desc "Migrate remote database"
|
80
|
+
task :migrate do |t, args|
|
81
|
+
require 'remoting/task'
|
82
|
+
|
83
|
+
remote('rake db:migrate', config.login) do
|
84
|
+
source "/usr/local/rvm/scripts/rvm"
|
85
|
+
rvm :use, config.ruby
|
86
|
+
cd config.dest
|
87
|
+
command("RAILS_ENV=production bundle exec rake db:migrate")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "Seed remote database"
|
92
|
+
task :seed do |t, args|
|
93
|
+
require 'remoting/task'
|
94
|
+
|
95
|
+
remote('rake db:seed', config.login) do
|
96
|
+
source "/usr/local/rvm/scripts/rvm"
|
97
|
+
rvm :use, config.ruby
|
98
|
+
cd config.dest
|
99
|
+
command("RAILS_ENV=production bundle exec rake db:seed")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
namespace :assets do
|
106
|
+
|
107
|
+
desc 'Precompile assets'
|
108
|
+
task :precompile do
|
109
|
+
require 'remoting/task'
|
110
|
+
|
111
|
+
remote('rake assets:precompile', config.login) do
|
112
|
+
source "/usr/local/rvm/scripts/rvm"
|
113
|
+
rvm :use, config.ruby
|
114
|
+
cd config.dest
|
115
|
+
command("RAILS_ENV=production bundle exec rake assets:precompile")
|
116
|
+
echo 'restarting ...'
|
117
|
+
mkdir '-p', config.dest.join('tmp')
|
118
|
+
touch config.dest.join('tmp', 'restart.txt')
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
namespace :assets do
|
3
|
+
|
4
|
+
desc 'remoting support for rails-slow-assets-workaround'
|
5
|
+
task :compile do
|
6
|
+
require 'rails-slow-assets-workaround'
|
7
|
+
require 'remoting/task'
|
8
|
+
|
9
|
+
remote('rake assets:compile', config.login) do
|
10
|
+
source "/usr/local/rvm/scripts/rvm"
|
11
|
+
rvm :use, config.ruby
|
12
|
+
cd config.dest
|
13
|
+
command("RAILS_ENV=production bundle exec rake assets:compile")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/recipes/utils.rake
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
namespace :remote do
|
2
|
+
|
3
|
+
desc "Dump some remote environment info"
|
4
|
+
task :info do
|
5
|
+
require 'remoting/task'
|
6
|
+
remote('info', config.login) do
|
7
|
+
|
8
|
+
source "/usr/local/rvm/scripts/rvm"
|
9
|
+
which :ruby
|
10
|
+
echo "RUBY VERSION: `ruby --version`"
|
11
|
+
echo "RUBYGEM VERSION: `gem --version`"
|
12
|
+
command "RVM_VER=`rvm --version`"
|
13
|
+
echo "RVM VERSION: $RVM_VER"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Open a remote shell session on server"
|
18
|
+
task :ssh do
|
19
|
+
require 'remoting/task'
|
20
|
+
remote('ssh', config.login, :interactive => true) do
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/remoting.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "remoting"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.16"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["mcasimir"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-08-05"
|
13
13
|
s.description = "Remoting is a great way to turn plain rake tasks in scripts to administer the server remote. It provides a little framework to run remote commands over SSH along with a DSL to define remote scripts."
|
14
14
|
s.email = "maurizio.cas@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"examples/remote.rake",
|
27
27
|
"examples/remote.yml",
|
28
28
|
"lib/generators/remoting/install_generator.rb",
|
29
|
+
"lib/generators/remoting/recipe.rb",
|
29
30
|
"lib/remoting.rb",
|
30
31
|
"lib/remoting/commander.rb",
|
31
32
|
"lib/remoting/config.rb",
|
@@ -37,6 +38,14 @@ Gem::Specification.new do |s|
|
|
37
38
|
"lib/remoting/shell.rb",
|
38
39
|
"lib/remoting/ssh.rb",
|
39
40
|
"lib/remoting/task.rb",
|
41
|
+
"recipes/apache.rake",
|
42
|
+
"recipes/bare.rake",
|
43
|
+
"recipes/git.rake",
|
44
|
+
"recipes/precompile_assets_on_deploy.rake",
|
45
|
+
"recipes/rails.rake",
|
46
|
+
"recipes/slow_assets_workaround.rake",
|
47
|
+
"recipes/utils.rake",
|
48
|
+
"recipes/whenever.rake",
|
40
49
|
"remoting.gemspec"
|
41
50
|
]
|
42
51
|
s.homepage = "http://github.com/mcasimir/remoting"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remoting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- examples/remote.rake
|
79
79
|
- examples/remote.yml
|
80
80
|
- lib/generators/remoting/install_generator.rb
|
81
|
+
- lib/generators/remoting/recipe.rb
|
81
82
|
- lib/remoting.rb
|
82
83
|
- lib/remoting/commander.rb
|
83
84
|
- lib/remoting/config.rb
|
@@ -89,6 +90,14 @@ files:
|
|
89
90
|
- lib/remoting/shell.rb
|
90
91
|
- lib/remoting/ssh.rb
|
91
92
|
- lib/remoting/task.rb
|
93
|
+
- recipes/apache.rake
|
94
|
+
- recipes/bare.rake
|
95
|
+
- recipes/git.rake
|
96
|
+
- recipes/precompile_assets_on_deploy.rake
|
97
|
+
- recipes/rails.rake
|
98
|
+
- recipes/slow_assets_workaround.rake
|
99
|
+
- recipes/utils.rake
|
100
|
+
- recipes/whenever.rake
|
92
101
|
- remoting.gemspec
|
93
102
|
homepage: http://github.com/mcasimir/remoting
|
94
103
|
licenses:
|
@@ -105,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
114
|
version: '0'
|
106
115
|
segments:
|
107
116
|
- 0
|
108
|
-
hash:
|
117
|
+
hash: 2814619444637718291
|
109
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
119
|
none: false
|
111
120
|
requirements:
|