venus 0.2.0 → 0.3.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/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