venus 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,47 +18,54 @@ end
18
18
  Usage
19
19
  =====
20
20
 
21
- Project basic rubygems
21
+ * Setup gem 'capistrano' for deloyment.
22
22
 
23
- ```
24
- rails generate venus:init
25
- ```
23
+ ```
24
+ rails generate venus:deploy
25
+ ```
26
26
 
27
- Setting Mysql connection
28
27
 
29
- ```
30
- rails generate venus:mysql
31
- ```
28
+ * Essentail gems (simple_form, kminari...etc) and setup (removing public/index.html ...etc).
32
29
 
33
- Pagination gem "kaminari"
30
+ ```
31
+ rails generate venus:init
32
+ ```
34
33
 
35
- ```
36
- rails generate venus:paginate
37
- ```
34
+ * Setup Mysql connection
38
35
 
39
- Settings gem "settingslogic"
36
+ ```
37
+ rails generate venus:mysql
38
+ ```
40
39
 
41
- ```
42
- rails generate venus:settingslogic
43
- ```
40
+ * Pagination gem "kaminari"
44
41
 
45
- gem 'devise', default generate model `User`
42
+ ```
43
+ rails generate venus:paginate
44
+ ```
46
45
 
47
- ```
48
- rails generate venus:devise
49
- ```
46
+ * Setup gem "settingslogic"
50
47
 
51
- Facebook login (for model `User`)
48
+ ```
49
+ rails generate venus:settingslogic
50
+ ```
52
51
 
53
- ```
54
- rails generate venus:fbauth
55
- ```
52
+ * Setup gem 'devise', default generate model `User`
56
53
 
57
- Rspec testing framework
54
+ ```
55
+ rails generate venus:devise
56
+ ```
58
57
 
59
- ```
60
- rails generate venus:rspec
61
- ```
58
+ * Setup Omniauth for Facebook login (model `User`).
59
+
60
+ ```
61
+ rails generate venus:fbauth
62
+ ```
63
+
64
+ * Setup Rspec testing framework
65
+
66
+ ```
67
+ rails generate venus:rspec
68
+ ```
62
69
 
63
70
  TODO
64
71
  ====
@@ -0,0 +1,32 @@
1
+ module Venus
2
+ module Generators
3
+ class CronGenerator < Base
4
+ desc "Setup gem 'whenever' for scheduling"
5
+
6
+ def name
7
+ "Cron"
8
+ end
9
+
10
+ def asks
11
+ @capistrano = ask?("integrate to capistrano?", true) if has_gem?('capistrano') && has_file?('config/deploy.rb')
12
+ end
13
+
14
+ def gemfile
15
+ add_gem('whenever')
16
+ run 'bundle install'
17
+ run 'bundle exec wheneverize .'
18
+ end
19
+
20
+ def capistrano
21
+ if @capistrano
22
+ content = load_template('capistrano.erb')
23
+ to_file = 'config/deploy.rb'
24
+ unless file_has_content?(to_file, /[^#]*require[ ]*['"]whenever\/capistrano['"]/)
25
+ prepend_file(to_file, content)
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1 @@
1
+ require 'whenever/capistrano'
@@ -0,0 +1,71 @@
1
+ module Venus
2
+ module Generators
3
+ class DeployGenerator < Base
4
+ desc "Setup gem 'capistrano' for deployment"
5
+
6
+ def name
7
+ "capistrano"
8
+ end
9
+
10
+ def asks
11
+ @use_rvm = ask?('use rvm?', true)
12
+ @use_assets_pipline = ask?('use assets pipline?', true)
13
+ @use_passenger = ask?('use passenger?', true)
14
+ @git_uri = ask?('your git repository url?', 'git@github.com:foo/myapp.git')
15
+ @stage = ask_stage_infomation
16
+ if ask?('has staging server?', true)
17
+ @staging = ask_stage_infomation('staging')
18
+ end
19
+ end
20
+
21
+ def gemfile
22
+ @is_append = !file_has_content?('Gemfile','group :development do')
23
+ if @is_append
24
+ concat_template('Gemfile', 'gemfile.erb')
25
+ else
26
+ insert_template('Gemfile', 'gemfile.erb', :after => 'group :development do')
27
+ end
28
+ run 'bundle install'
29
+ end
30
+
31
+ def capify
32
+ run 'bundle exec capify .'
33
+ end
34
+
35
+ def capfile
36
+ if @use_assets_pipline
37
+ uncomment_lines('Capfile', 'deploy/assets')
38
+ end
39
+ end
40
+
41
+ def copy_configs
42
+ @app_name = app_name
43
+ @whenever = has_gem?('whenever')
44
+ template 'deploy.erb', 'config/deploy.rb'
45
+ template 'stage.erb', 'config/deploy/production.rb'
46
+ if @staging
47
+ @stage = @staging
48
+ template 'stage.erb', 'config/deploy/staging.rb'
49
+ end
50
+ end
51
+
52
+ def deploy_setup
53
+ if ask?('setup servers deployment?', true)
54
+ run 'bundle exec cap production deploy:setup'
55
+ run 'bundle exec cap staging deploy:setup' if @staging
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def ask_stage_infomation(prefix = 'production')
62
+ stage = {}
63
+ stage[:env] = ask?("your #{prefix} server Rails Env?", 'production')
64
+ stage[:user] = ask?("your #{prefix} server ssh user?", 'apps')
65
+ stage[:server] = ask?("your #{prefix} server host?", app_name+'.com')
66
+ stage[:branch] = ask?("your git branch?", 'master')
67
+ stage
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,93 @@
1
+
2
+ begin
3
+ require 'capistrano_colors'
4
+ rescue LoadError
5
+ puts "`gem install capistrano_colors` to get output more userfriendly."
6
+ end
7
+
8
+ <% if @use_rvm %>
9
+ require "rvm/capistrano"
10
+ set :rvm_type, :system
11
+ <% end %>
12
+
13
+ require 'capistrano/ext/multistage'
14
+ set :stages, %w(production<% if @staging %> staging<%end%>)
15
+ set :default_stage, "<% if @staging %>staging<%else%>production<%end%>"
16
+
17
+ require 'bundler/capistrano'
18
+ <% if @whenever %>
19
+ require 'whenever/capistrano'<% end %>
20
+
21
+ set :application, "<%= @app_name %>"
22
+ set :repository, "<%= @git_uri %>"
23
+ set :scm, :git
24
+
25
+ # set :deploy_via, :remote_cache
26
+ set :git_shallow_clone, 1
27
+
28
+ set :scm_verbose, true
29
+ set :use_sudo, false
30
+ set :symlink_paths, ['config/database.yml', 'config/setting.yml', 'public/uploads']
31
+
32
+ <% if @use_assets_pipline %>
33
+ # from https://github.com/AF83/capistrano-af83/blob/master/lib/capistrano/af83/deploy/assets.rb
34
+ set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)
35
+ <%end%>
36
+
37
+ namespace :deploy do
38
+
39
+ desc "Restart passenger process"
40
+ task :restart, :roles => [:web], :except => { :no_release => true } do
41
+ <% if @use_passenger %>
42
+ run "touch #{current_path}/tmp/restart.txt"
43
+ <% end %>
44
+ end
45
+
46
+ <% if @use_assets_pipline %>
47
+ namespace :assets do
48
+
49
+ desc <<-DESC
50
+ Run the asset precompilation rake task. You can specify the full path \
51
+ to the rake executable by setting the rake variable. You can also \
52
+ specify additional environment variables to pass to rake via the \
53
+ asset_env variable. The defaults are:
54
+
55
+ set :rake, "rake"
56
+ set :rails_env, "production"
57
+ set :asset_env, "RAILS_GROUPS=assets"
58
+ set :assets_dependencies, fetch(:assets_dependencies) + %w(config/locales/js)
59
+ DESC
60
+ task :precompile, :roles => :web, :except => { :no_release => true } do
61
+ from = source.next_revision(current_revision) rescue nil
62
+ if !from || capture("cd #{latest_release} && #{source.local.log(from)} #{assets_dependencies.join ' '} | wc -l").to_i > 0
63
+ run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
64
+ else
65
+ logger.info "Skipping asset pre-compilation because there were no asset changes"
66
+ end
67
+ end
68
+ end
69
+ <%end%>
70
+
71
+ task :symlink_files, :roles => [:web] do
72
+ symlink_paths.each do |path|
73
+ run "ln -sf #{shared_path}/#{path} #{release_path}/#{path}"
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ namespace :remote_rake do
80
+ desc "Run a task on remote servers, ex: cap staging remote_rake:invoke task=cache:clear"
81
+ task :invoke do
82
+ run "cd #{deploy_to}/current; RAILS_ENV=#{rails_env} bundle exec rake #{ENV['task']}"
83
+ end
84
+ end
85
+
86
+ # cap staging tail_log
87
+ task :tail_log, :roles => :app do
88
+ run "tail -f -n 100 #{shared_path}/log/#{rails_env}.log"
89
+ end
90
+
91
+
92
+ after "deploy:finalize_update", "deploy:symlink_files"
93
+ after "deploy", "deploy:cleanup"
@@ -0,0 +1,9 @@
1
+
2
+ <%- if @is_append %>group :development do<%- end -%>
3
+ gem 'capistrano'
4
+ gem 'capistrano-ext'
5
+ gem 'capistrano_colors'
6
+ <%- if @use_rvm %> gem 'rvm-capistrano'
7
+ <%- end -%>
8
+ gem 'cape'
9
+ <%- if @is_append %>end<%- end -%>
@@ -0,0 +1,7 @@
1
+ set :rails_env, "<%= @stage[:env] %>"
2
+ set :user, '<%= @stage[:user] %>'
3
+ set :domain, '<%= @stage[:server] %>'
4
+ set :branch, '<%= @stage[:branch] %>'
5
+
6
+ server "#{domain}", :web, :app, :db, :primary => true
7
+ set :deploy_to, "/home/#{user}/#{domain}"
@@ -19,7 +19,7 @@ module Venus
19
19
  end
20
20
 
21
21
  def has_gem?(gemname)
22
- file_has_content?('Gemfile', /gem[ ]+['"]#{gemname}['"]/m)
22
+ file_has_content?('Gemfile.lock', / #{gemname} \(/m)
23
23
  end
24
24
 
25
25
  def has_file?(file)
@@ -9,11 +9,12 @@ module Venus
9
9
 
10
10
  def asks
11
11
  @gems = {}
12
- [:simple_form, :nested_form, :haml, :whenever].each do |gemname|
12
+ @paginate = ask?('install paginate gem "kaminari"?', true) unless has_gem?('kaminari')
13
+ @whenever = ask?('install scheduling gem "whenever"?', true) unless has_gem?('whenever')
14
+ [:simple_form, :nested_form, :haml].each do |gemname|
13
15
  @gems[gemname] = ask?("install gem '#{gemname}'?", true)
14
16
  end
15
17
  @gem_development = ask?("install group gems for development?", true)
16
- @paginate = ask?('install paginate gem "kaminari"?', true) unless has_gem?('kaminari')
17
18
  end
18
19
 
19
20
  def remove_usless_file
@@ -21,6 +22,18 @@ module Venus
21
22
  remove_file 'app/assets/images/rails.png'
22
23
  end
23
24
 
25
+ def paginate
26
+ if @paginate
27
+ generate 'venus:paginate'
28
+ end
29
+ end
30
+
31
+ def cron
32
+ if @whenever
33
+ generate 'venus:cron'
34
+ end
35
+ end
36
+
24
37
  def enable_email_delivery_error
25
38
  file = 'config/environments/development.rb'
26
39
  find = 'raise_delivery_errors = false'
@@ -46,12 +59,6 @@ module Venus
46
59
  run 'bundle install'
47
60
  end
48
61
 
49
- def paginate
50
- if @paginate
51
- generate 'venus:paginate'
52
- end
53
- end
54
-
55
62
  end
56
63
  end
57
64
  end
data/lib/venus/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Venus
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: venus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
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: 2013-01-01 00:00:00.000000000 Z
12
+ date: 2013-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -73,6 +73,12 @@ files:
73
73
  - Rakefile
74
74
  - TODO.md
75
75
  - lib/generators/venus/base.rb
76
+ - lib/generators/venus/cron/cron_generator.rb
77
+ - lib/generators/venus/cron/templates/capistrano.erb
78
+ - lib/generators/venus/deploy/deploy_generator.rb
79
+ - lib/generators/venus/deploy/templates/deploy.erb
80
+ - lib/generators/venus/deploy/templates/gemfile.erb
81
+ - lib/generators/venus/deploy/templates/stage.erb
76
82
  - lib/generators/venus/devise/devise_generator.rb
77
83
  - lib/generators/venus/fbauth/fbauth_generator.rb
78
84
  - lib/generators/venus/fbauth/templates/migration.rb