rda 0.3.3 → 0.4.0.pre

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - "1.9.3"
3
+ - "1.9.2"
4
+ - "1.8.7"
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ **0.4.0 (2012)**
2
+
3
+ * Provide support to configure options of rda
4
+ * Set up load paths of applications when setting up rvm
5
+ * Introduce a new command `rda app deploy` to deploy applications to
6
+ nginx
7
+
1
8
  **0.3.3 (Fri, Nov 9, 2012)**
2
9
 
3
10
  * Added a rake task for running specs
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rda (0.3.3)
4
+ rda (0.4.0.pre)
5
5
  activesupport (>= 3.1)
6
6
  confstruct (~> 0.2)
7
+ oj (~> 1.4.4)
7
8
  thor (~> 0.15)
8
9
 
9
10
  GEM
@@ -23,15 +24,17 @@ GEM
23
24
  guard-bundler (1.0.0)
24
25
  bundler (~> 1.0)
25
26
  guard (~> 1.1)
26
- guard-rspec (1.1.0)
27
+ guard-rspec (2.1.1)
27
28
  guard (>= 1.1)
29
+ rspec (~> 2.11)
28
30
  i18n (0.6.1)
29
31
  listen (0.4.7)
30
32
  rb-fchange (~> 0.0.5)
31
33
  rb-fsevent (~> 0.9.1)
32
34
  rb-inotify (~> 0.8.8)
33
35
  method_source (0.7.1)
34
- multi_json (1.3.6)
36
+ multi_json (1.3.7)
37
+ oj (1.4.4)
35
38
  pry (0.9.9.6)
36
39
  coderay (~> 1.0.5)
37
40
  method_source (~> 0.7.1)
@@ -42,14 +45,14 @@ GEM
42
45
  rb-fsevent (0.9.1)
43
46
  rb-inotify (0.8.8)
44
47
  ffi (>= 0.5.0)
45
- rspec (2.10.0)
46
- rspec-core (~> 2.10.0)
47
- rspec-expectations (~> 2.10.0)
48
- rspec-mocks (~> 2.10.0)
49
- rspec-core (2.10.1)
50
- rspec-expectations (2.10.0)
48
+ rspec (2.11.0)
49
+ rspec-core (~> 2.11.0)
50
+ rspec-expectations (~> 2.11.0)
51
+ rspec-mocks (~> 2.11.0)
52
+ rspec-core (2.11.1)
53
+ rspec-expectations (2.11.3)
51
54
  diff-lcs (~> 1.1.3)
52
- rspec-mocks (2.10.1)
55
+ rspec-mocks (2.11.3)
53
56
  ruby_gntp (0.3.4)
54
57
  slop (2.4.4)
55
58
  thor (0.15.4)
@@ -61,7 +64,7 @@ DEPENDENCIES
61
64
  fivemat (~> 1.0)
62
65
  guard (~> 1.2)
63
66
  guard-bundler (~> 1.0)
64
- guard-rspec (~> 1.1)
67
+ guard-rspec (~> 2.1)
65
68
  pry (~> 0.9.9)
66
69
  rake
67
70
  rda!
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Rda
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/towerhe/rda.png?branch=develop)](http://travis-ci.org/towerhe/rda)
4
+ [![Dependency Status](https://gemnasium.com/towerhe/rda.png)](https://gemnasium.com/towerhe/rda)
5
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/towerhe/rda)
6
+
3
7
  ### Description
4
8
 
5
9
  Rda(Rails Development Assist) is combined with lots of useful commands which can help you to setup your development enviroments and tools more quickly.
@@ -24,20 +28,14 @@ Or simply add rda to the Gemfile
24
28
  gem 'rda'
25
29
  ```
26
30
 
27
- That's all.
31
+ And then, you should run `rda init` under the root of your application.
28
32
 
29
33
  #### Configuration
30
34
 
31
- For configuring rda, you need to create an initializer for rda:
32
-
33
- ```ruby
34
- # config/initializers/rda.rb
35
- if Rails.env == 'development'
36
- Rda.configure do
37
- nginx_conf_paths ['/etc/nginx', '/opt/nginx/conf', '/usr/local/nginx/conf']
38
- end
39
- end
40
- ```
35
+ After you run `rda init` successfully. You will see a generated file
36
+ named `.rda` under the root of your application and it contains options
37
+ like:
38
+ [rda.json](https://github.com/towerhe/rda/blob/develop/lib/rda/templates/rda.json)
41
39
 
42
40
  #### Set up RVM
43
41
 
@@ -48,13 +46,33 @@ rda rvm setup
48
46
  First of all, this command will check whether the RVM is installed. If RVM is installed, it will create a .rvmrc for the application with the content which looks like:
49
47
 
50
48
  ```bash
51
- if [[ -s '/path/to/rvm/environments/ruby-1.9.3-p194@app_name' ]]; then
52
- . '/path/to/rvm/environments/ruby-1.9.3-p194@app_name'
49
+ if [[ -s '/path/to/rvm/environments/ruby-1.9.3-p286@app_name' ]]; then
50
+ . '/path/to/rvm/environments/ruby-1.9.3-p286@app_name'
53
51
  else
54
- rvm use ruby-1.9.3-p194@app_name --create
52
+ rvm use ruby-1.9.3-p286@app_name --create
55
53
  fi
56
54
  ```
57
55
 
56
+ And then, it will create a config file to set up load paths of your
57
+ applications.
58
+
59
+ ```ruby
60
+ # config/setup_load_paths.rb
61
+ if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
62
+ begin
63
+ require 'rvm'
64
+ RVM.use_from_path! File.dirname(File.dirname(__FILE__))
65
+ rescue LoadError
66
+ raise "RVM gem is currently unavailable."
67
+ end
68
+ end
69
+
70
+ # If you're not using Bundler at all, remove lines bellow
71
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile',
72
+ File.dirname(__FILE__))
73
+ require 'bundler/setup'
74
+ ```
75
+
58
76
  After setting up RVM, you need to trust the rvmrc by:
59
77
 
60
78
  ```bash
@@ -71,53 +89,36 @@ If RVM is not installed, this command will do nothing but exit.
71
89
  rda rvm discard
72
90
  ```
73
91
 
74
- This command removes the .rvmrc from your rails application.
92
+ This command removes the `.rvmrc` and `config/setup_load_paths.rb` from your rails application.
75
93
 
76
94
  #### Setup Nginx
77
95
 
78
96
  ```bash
79
- rda nginx setup --environment production --hostname www.example.com
97
+ rda nginx setup
80
98
  ```
81
99
 
82
- First this command will try to find the config files of Nginx, which you have installed, from the following paths:
83
-
84
- * /etc/nginx
85
- * /usr/local/nginx/conf
86
- * /opt/nginx/conf
87
-
88
- You can change the default searching paths by:
89
-
90
- ```ruby
91
- Rda.configure { nginx_conf_paths ['/path/to/nginx/conf'] }
92
- ```
93
-
94
- Please make sure that you have the write permission of the directory you choosed, or you can run:
100
+ Please make sure that you have the write permission to config your nginx, or you can run:
95
101
 
96
102
  ```bash
97
- rvmsudo rda nginx setup --environment production --hostname www.example.com
103
+ rvmsudo rda nginx setup
98
104
  ```
99
105
 
100
- If there are more than one paths found, it will give you a choice to decide which one will be used. After choosing a proper path, it will try to create two directories sites-available and sites-enabled to save the configs of rails applications.
106
+ It will try to create `sites-available` and `sites-enabled` to save the configs of rails applications.
101
107
 
102
108
  * sites-available saves the configs of the rails applications.
103
109
  * sites-enabled saves the link to the rails applications.
104
110
 
105
- Next it will set Nginx to include the configs under sites-enabled. It means that only the applications under sites-enabled will be loaded. And than it will create a config file for your application under sites-available and create a link to the config file under sites-enabled. After all, it will create a local hostname for your application in /etc/hosts.
106
-
111
+ Next it will set Nginx to include the configs under `sites-enabled`. It means that only the applications configured under `sites-enabled` will be loaded.
107
112
 
108
- Finally, You need to start Nginx `/path/to/nginx/sbin/nginx` and then visit http://your_app_name.local.
113
+ #### Deploy application
109
114
 
110
- #### Discard Nginx settings
115
+ Now you should deploy your applications with a new command of rda.
111
116
 
112
117
  ```bash
113
- rda nginx discard --hostname www.example.com # Or
114
-
115
- sudo rda nginx discard --hostname www.example.com # Or
116
-
117
- rvmsudo rda nginx discard --hostname www.example.com # Using RVM
118
+ rda app deploy
118
119
  ```
119
120
 
120
- This command will clean up all the things created or configured by `rda nginx setup`.
121
+ It will create a config file for your application under `sites-available` and create a link to the config file under `sites-enabled`. After all, it will create a local hostname for your application in `/etc/hosts`.
121
122
 
122
123
  #### Restart application
123
124
 
@@ -125,7 +126,7 @@ This command will clean up all the things created or configured by `rda nginx se
125
126
  rda app restart
126
127
  ```
127
128
 
128
- This command touches tmp/restart.txt to restart your rails application, For detail, please visit [http://bit.ly/ztKA07](http://bit.ly/ztKA07)
129
+ This command touches `tmp/restart.txt` to restart your rails application, For detail, please visit [http://bit.ly/ztKA07](http://bit.ly/ztKA07)
129
130
 
130
131
  #### Release your rails application
131
132
 
data/bin/rda CHANGED
@@ -3,23 +3,4 @@
3
3
 
4
4
  require 'rda'
5
5
 
6
- class RdaCommand < Thor
7
- desc 'rvm ACTION', 'Set up RVM. Available actions: setup, discard.'
8
- def rvm(action)
9
- Rda::Rvm.new.send(action.to_sym)
10
- end
11
-
12
- desc 'nginx ACTION', 'Manage settings of nginx. Available actions: setup, discard.'
13
- method_option :environment, aliases: "-e", desc: "Set the environment of the application"
14
- method_option :hostname, aliases: "-h", desc: "Set the hostname of the application"
15
- def nginx(action)
16
- Rda::Nginx.new.send(action.to_sym, options)
17
- end
18
-
19
- desc 'app ACTION', 'Manage the lifecycle of the application. Available actions: restart, release.'
20
- def app(action)
21
- Rda::App.new.send(action.to_sym)
22
- end
23
- end
24
-
25
- RdaCommand.start
6
+ Rda::Command.start
data/lib/rda/app.rb CHANGED
@@ -1,11 +1,37 @@
1
1
  module Rda
2
2
  class App < Thor
3
- desc 'Restart', 'Restart the application'
3
+ include Thor::Actions
4
+ include Helper
5
+
6
+ def self.source_root
7
+ File.dirname(__FILE__)
8
+ end
9
+
10
+ desc 'deploy', 'Deploy the application to nginx'
11
+ def deploy
12
+ conf_dir = Rda.config.nginx.conf_dir
13
+
14
+ unless Rda::Nginx.setup?
15
+ $stderr.puts 'ERROR: Nginx is not set up properly. Please run `rda nginx setup` first.'
16
+ return
17
+ end
18
+
19
+ domain = Rda.config.domain
20
+
21
+ template("templates/nginx", "#{conf_dir}/sites-available/#{domain}")
22
+ link_file("#{conf_dir}/sites-available/#{domain}", "#{conf_dir}/sites-enabled/#{domain}")
23
+
24
+ unless configured?('/etc/hosts', "127.0.0.1 #{domain}")
25
+ append_file "/etc/hosts", "127.0.0.1 #{domain}\n"
26
+ end
27
+ end
28
+
29
+ desc 'restart', 'Restart the application'
4
30
  def restart
5
31
  FileUtils.touch dir_of('tmp') + '/restart.txt'
6
32
  end
7
33
 
8
- desc 'Release', 'Release the application'
34
+ desc 'release', 'Release the application'
9
35
  def release
10
36
  version_file = File.join(Rda::Rails.root, 'VERSION')
11
37
  version = File.exist?(version_file) ? File.read(version_file).strip : ""
@@ -0,0 +1,38 @@
1
+ %w(rails rvm nginx app).each do |f|
2
+ require File.join(File.dirname(__FILE__), f)
3
+ end
4
+
5
+ module Rda
6
+ class Command < Thor
7
+ include Thor::Actions
8
+
9
+ def self.source_root
10
+ File.dirname(__FILE__)
11
+ end
12
+
13
+ desc 'init', 'Create a default config for rda.'
14
+ def init
15
+ template('templates/rda.json', "#{Rda::Rails.root}/.rda")
16
+ end
17
+
18
+ desc 'rvm ACTION', 'Set up RVM. Available actions: setup, discard.'
19
+ def rvm(action)
20
+ Rda::Rvm.new.send(action.to_sym)
21
+ end
22
+
23
+ desc 'nginx ACTION', 'Manage settings of nginx. Available actions: setup, discard.'
24
+ def nginx(action)
25
+ Rda::Nginx.new.send(action.to_sym, options)
26
+ end
27
+
28
+ desc 'app ACTION', 'Manage the lifecycle of the application. Available actions: restart, release.'
29
+ def app(action)
30
+ Rda::App.new.send(action.to_sym)
31
+ end
32
+
33
+ private
34
+ def app_name
35
+ Rails.app_name
36
+ end
37
+ end
38
+ end
data/lib/rda/helper.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Rda
2
+ module Helper
3
+ def configured?(fname, conf)
4
+ IO.readlines(fname).each do |l|
5
+ if l.strip.start_with?(conf)
6
+ $stderr.puts "INFO: #{conf} has already been set!"
7
+
8
+ return true
9
+ end
10
+ end
11
+
12
+ false
13
+ end
14
+ end
15
+ end
data/lib/rda/nginx.rb CHANGED
@@ -1,145 +1,54 @@
1
1
  module Rda
2
2
  class Nginx < Thor
3
3
  include Thor::Actions
4
-
5
- def self.source_root
6
- File.dirname(__FILE__)
7
- end
4
+ include Helper
8
5
 
9
6
  desc "setup", "Set up your rails application"
10
7
  def setup(options = {})
11
8
  return unless installed?
12
9
 
13
- @hostname, @environment = options["hostname"], options["environment"]
14
-
15
- create_setup_load_paths
16
10
  mkdir_for_sites
17
- set_passenger_user_and_group
18
11
  include_sites_enabled
19
-
20
- template("templates/nginx", "#{conf_path}/sites-available/#{hostname}")
21
- link_file("#{conf_path}/sites-available/#{hostname}", "#{conf_path}/sites-enabled/#{hostname}")
22
-
23
- unless configured?('/etc/hosts', "127.0.0.1 #{hostname}")
24
- append_file "/etc/hosts", "127.0.0.1 #{hostname}"
25
- end
26
12
  end
27
13
 
28
- desc "discard", "Remove the settings of your rails application from nginx"
29
- def discard(options = {})
30
- return unless installed?
31
-
32
- @hostname = options["hostname"]
14
+ def self.setup?
15
+ conf_dir = Rda.config.nginx.conf_dir
33
16
 
34
- %W(enabled available).each do |n|
35
- remove_file "#{conf_path}/sites-#{n}/#{hostname}"
36
- end
37
-
38
- gsub_file("/etc/hosts", "127.0.0.1 #{hostname}", '')
39
- remove_file "#{Rda::Rails.root}/config/setup_load_paths.rb"
17
+ File.directory?(File.join(conf_dir, 'sites-available')) &&
18
+ File.directory?(File.join(conf_dir, 'sites-enabled'))
40
19
  end
41
20
 
42
21
  private
43
22
  def installed?
44
- File.directory?(conf_path) if conf_path
45
- end
46
-
47
- def conf_path
48
- return @conf_path if @conf_path
49
-
50
- if available_paths.empty?
51
- prompt_not_found
52
-
53
- return
54
- end
55
-
56
- @conf_path = available_paths.first
57
- begin
58
- @conf_path = ask_for_choosing_one if available_paths.size > 1
59
- rescue SystemExit
60
- $stderr.puts "ERROR: You need to choose a config directory of Nginx!"
61
- return
62
- end
63
-
64
- @conf_path
65
- end
66
-
67
- def hostname
68
- @hostname || "#{Rda::Rails.app_name}.local"
23
+ File.exists?(conf_path) if conf_path
69
24
  end
70
25
 
71
- def available_paths
72
- search_paths = Rda.config.nginx_conf_paths || []
73
- @paths ||= search_paths.select { |p| File.directory? p if p } unless search_paths.empty?
26
+ def conf_dir
27
+ Rda.config.nginx.conf_dir
74
28
  end
75
29
 
76
- def prompt_not_found
77
- $stderr.puts "ERROR: Config directory of Nginx is not found in the following paths:\n\n"
78
- Rda.config.nginx_conf_paths.each { |p| $stderr.puts "* #{p}" }
79
- $stderr.puts "\n"
80
- end
81
-
82
- def ask_for_choosing_one
83
- available_paths.each_with_index { |p, i| puts "#{i + 1}) #{p}" }
84
- puts "\n"
85
- chosen = ask "Found more than one config directory of Nginx, please choose one to setup:"
86
-
87
- index = chosen.to_i - 1
88
-
89
- index >= 0 && index < available_paths.size ? available_paths[index] : exit
90
- end
30
+ def conf_path
31
+ if File.exists? File.join(conf_dir, 'nginx.conf')
32
+ return File.join(conf_dir, 'nginx.conf')
33
+ end
91
34
 
92
- def create_setup_load_paths
93
- copy_file "templates/setup_load_paths.rb", "#{Rda::Rails.root}/config/setup_load_paths.rb"
35
+ $stderr.puts "ERROR: Missing `nginx.conf` in `#{conf_dir}`."
94
36
  end
95
37
 
96
38
  def mkdir_for_sites
97
39
  %W(available enabled).each do |n|
98
- dir = conf_path + "/sites-#{n}"
40
+ dir = conf_dir + "/sites-#{n}"
99
41
  empty_directory(dir) unless File.directory?(dir)
100
42
  end
101
43
  end
102
44
 
103
- def set_passenger_user_and_group
104
- conf = conf_path + '/nginx.conf'
105
-
106
- unless configured?(conf, 'passenger_default_user')
107
- gsub_file conf, /http \{/, <<-PASSENGER
108
- http {
109
- passenger_default_user root;
110
- PASSENGER
111
- end
112
-
113
- unless configured?(conf, 'passenger_default_group')
114
- gsub_file conf, /http \{/, <<-PASSENGER
115
- http {
116
- passenger_default_group root;
117
- PASSENGER
118
- end
119
- end
120
-
121
45
  def include_sites_enabled
122
- conf = conf_path + '/nginx.conf'
123
- unless configured?(conf, "include #{conf_path}/sites-enabled/*;")
46
+ unless configured?(conf_path, "include #{conf_dir}/sites-enabled/*;")
124
47
  gsub_file conf, /http \{/, <<-INCLUDE_SITES_ENABLED
125
48
  http {
126
- include #{conf_path}/sites-enabled/*;
49
+ include #{conf_dir}/sites-enabled/*;
127
50
  INCLUDE_SITES_ENABLED
128
51
  end
129
52
  end
130
-
131
- def configured?(fname, conf)
132
- File.open(fname) do |f|
133
- f.readlines.each do |l|
134
- if l.strip.start_with?(conf)
135
- $stderr.puts "INFO: #{conf} has already been set!"
136
-
137
- return true
138
- end
139
- end
140
- end
141
-
142
- false
143
- end
144
53
  end
145
54
  end
data/lib/rda/rvm.rb CHANGED
@@ -10,6 +10,7 @@ module Rda
10
10
  def setup
11
11
  if installed?
12
12
  template('templates/rvmrc', rvmrc_path)
13
+ create_setup_load_paths
13
14
  else
14
15
  $stderr.puts "ERROR: RVM is not found. Please make sure that RVM is installed."
15
16
  end
@@ -17,11 +18,8 @@ module Rda
17
18
 
18
19
  desc "discard", "Discard RVM settings for rails application"
19
20
  def discard
20
- if File.exists?(rvmrc_path)
21
- remove_file(rvmrc_path)
22
- else
23
- $stderr.puts "ERROR: #{rvmrc_path} not found."
24
- end
21
+ remove_file(rvmrc_path)
22
+ remove_file(setup_load_paths_path)
25
23
  end
26
24
 
27
25
  private
@@ -44,5 +42,21 @@ module Rda
44
42
  def rvmrc_path
45
43
  "#{Rda::Rails.root}/.rvmrc"
46
44
  end
45
+
46
+ def setup_load_paths_path
47
+ "#{Rda::Rails.root}/config/setup_load_paths.rb"
48
+ end
49
+
50
+ def create_setup_load_paths
51
+ copy_file "templates/setup_load_paths.rb", "#{Rda::Rails.root}/config/setup_load_paths.rb"
52
+ end
53
+
54
+ def remove_file(file)
55
+ if File.exists?(file)
56
+ super(file)
57
+ else
58
+ $stderr.puts "ERROR: #{file} not found."
59
+ end
60
+ end
47
61
  end
48
62
  end
@@ -1,6 +1,10 @@
1
1
  server {
2
- server_name <%= hostname %>;
2
+ server_name <%= Rda.config.domain %>;
3
3
  root <%= "#{Rda::Rails.root}/public" %>;
4
+ rails_env <%= Rda.config.rails_env || "development" %>;
5
+
4
6
  passenger_enabled on;
5
- rails_env <%= @environment || "development" %>;
7
+ <% Rda.config.passenger.each do |k, v| %>
8
+ <%= "passenger_#{k} #{v};" %>
9
+ <% end %>
6
10
  }
@@ -0,0 +1,102 @@
1
+ // The configuration of rda should be a valid JSON hash
2
+ {
3
+ /**
4
+ * This option allows you to specify the domain of the application
5
+ *
6
+ * @default YOUR_APP_NAME.local
7
+ * @required
8
+ */
9
+ "domain": "<%= app_name %>.local",
10
+
11
+ /**
12
+ * This option allows you to specify the default RAILS_ENV value
13
+ *
14
+ * @default "development"
15
+ * @required
16
+ */
17
+ "rails_env": "development",
18
+
19
+ /**
20
+ * Configuring Nginx
21
+ */
22
+ "nginx": {
23
+ /**
24
+ * This option allows you to specify the config directory of your nginx
25
+ * installation
26
+ *
27
+ * @default "/opt/nginx/conf"
28
+ * @required
29
+ */
30
+ "conf_dir": "/opt/nginx/conf"
31
+ },
32
+
33
+ /**
34
+ * Configuring Phusion Passenger
35
+ *
36
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_configuring_phusion_passenger
37
+ */
38
+ "passenger": {
39
+ /**
40
+ * This option allows you to override that behavior and explicitly set
41
+ * a user to run the web application as, regardless of the ownership of
42
+ * environment.rb/config.ru.
43
+ *
44
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_user_lt_username_gt
45
+ */
46
+ "user": "root",
47
+
48
+ /**
49
+ * This option allows you to override that behavior and explicitly set
50
+ * a group to run the web application as, regardless of the ownership of
51
+ * environment.rb/config.ru.
52
+ *
53
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_group_lt_group_name_gt
54
+ */
55
+ "group": "root"
56
+
57
+ /**
58
+ * This option allows you to specify the Ruby interpreter to use.
59
+ *
60
+ * NOTE This option is supported by passenger 4.0 only.
61
+ *
62
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_ruby_lt_filename_gt
63
+ * @optional
64
+ */
65
+ // "ruby": "path/to/ruby"
66
+
67
+ /** Resource control and optimization options **/
68
+ /**
69
+ * The maximum number of application processes that may
70
+ * simultanously exist. A larger number results in higher memory
71
+ * usage, but improved ability to handle concurrent HTTP clients.
72
+ *
73
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMaxPoolSize
74
+ * @optional
75
+ * @default 6
76
+ */
77
+ // "max_pool_size": 15
78
+
79
+ /**
80
+ * This specifies the minimum number of application processes that
81
+ * should exist for a given application. You should set this option
82
+ * to a non-zero value if you want to avoid potentially long startup
83
+ * times after a website has been idle for an extended period.
84
+ *
85
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMinInstances
86
+ * @optional
87
+ * @default 1
88
+ */
89
+ // "min_instances": 10
90
+
91
+ /**
92
+ * The maximum number of requests an application process will
93
+ * process. After serving that many requests, the application
94
+ * process will be shut down and Phusion Passenger will restart it.
95
+ *
96
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMaxRequests
97
+ * @optional
98
+ * @default 0
99
+ */
100
+ // "max_requests": 10000
101
+ }
102
+ }
data/lib/rda/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rda
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0.pre"
3
3
  end
data/lib/rda.rb CHANGED
@@ -1,18 +1,21 @@
1
1
  require 'thor'
2
+ require 'oj'
2
3
  require 'confstruct'
3
4
  require 'confstruct/configuration'
4
5
  require 'active_support/inflector'
5
6
 
6
- require 'rda/rails'
7
- require 'rda/rvm'
8
- require 'rda/nginx'
9
- require 'rda/app'
7
+ require 'rda/helper'
8
+ require 'rda/command'
10
9
 
11
10
  module Rda
12
11
  class << self
13
12
  def config
14
- @config ||= Confstruct::Configuration.new do
15
- nginx_conf_paths ['/etc/nginx', '/usr/local/nginx/conf', '/opt/nginx/conf']
13
+ begin
14
+ @config ||= Confstruct::Configuration.new(
15
+ Oj.load(File.open(File.join(Rda::Rails.root, '.rda')))
16
+ )
17
+ rescue Errno::ENOENT
18
+ $stderr.puts 'ERROR: Rda is not initialized, please run `rda init` first.'
16
19
  end
17
20
  end
18
21
 
data/rda.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency 'rspec', '~> 2.10'
23
23
  s.add_development_dependency 'guard', '~> 1.2'
24
24
  s.add_development_dependency 'guard-bundler', '~> 1.0'
25
- s.add_development_dependency 'guard-rspec', '~> 1.1'
25
+ s.add_development_dependency 'guard-rspec', '~> 2.1'
26
26
  s.add_development_dependency 'fivemat', '~> 1.0'
27
27
  if RUBY_PLATFORM =~ /darwin/
28
28
  s.add_development_dependency 'ruby_gntp', '~> 0.3'
@@ -31,4 +31,5 @@ Gem::Specification.new do |s|
31
31
  s.add_dependency 'activesupport', '>= 3.1'
32
32
  s.add_dependency 'thor', '~> 0.15'
33
33
  s.add_dependency 'confstruct', '~> 0.2'
34
+ s.add_dependency 'oj', '~> 1.4.4'
34
35
  end
data/spec/dummy/.rda ADDED
@@ -0,0 +1,100 @@
1
+ // The configuration of rda should be a valid JSON hash
2
+ {
3
+ /**
4
+ * This option allows you to specify the domain of the application
5
+ *
6
+ * @default YOUR_APP_NAME.local
7
+ * @required
8
+ */
9
+ "domain": "dummy.local",
10
+
11
+ /**
12
+ * This option allows you to specify the default RAILS_ENV value
13
+ *
14
+ * @default "development"
15
+ * @required
16
+ */
17
+ "rails_env": "development",
18
+
19
+ /**
20
+ * Configuring Nginx
21
+ */
22
+ "nginx": {
23
+ /**
24
+ * This option allows you to specify the config directory of your nginx
25
+ * installation
26
+ *
27
+ * @default "/opt/nginx/conf"
28
+ * @required
29
+ */
30
+ "conf_dir": "/opt/nginx/conf"
31
+ },
32
+
33
+ /**
34
+ * Configuring Phusion Passenger
35
+ *
36
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_configuring_phusion_passenger
37
+ */
38
+ "passenger": {
39
+ /**
40
+ * This option allows you to override that behavior and explicitly set
41
+ * a user to run the web application as, regardless of the ownership of
42
+ * environment.rb/config.ru.
43
+ *
44
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_user_lt_username_gt
45
+ */
46
+ "user": "root",
47
+
48
+ /**
49
+ * This option allows you to override that behavior and explicitly set
50
+ * a group to run the web application as, regardless of the ownership of
51
+ * environment.rb/config.ru.
52
+ *
53
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_group_lt_group_name_gt
54
+ */
55
+ "group": "root"
56
+
57
+ /**
58
+ * This option allows you to specify the Ruby interpreter to use.
59
+ *
60
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#_passenger_ruby_lt_filename_gt
61
+ * @optional
62
+ */
63
+ // "ruby": "path/to/ruby"
64
+
65
+ /** Resource control and optimization options **/
66
+ /**
67
+ * The maximum number of application processes that may
68
+ * simultanously exist. A larger number results in higher memory
69
+ * usage, but improved ability to handle concurrent HTTP clients.
70
+ *
71
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMaxPoolSize
72
+ * @optional
73
+ * @default 6
74
+ */
75
+ // "max_pool_size": 15
76
+
77
+ /**
78
+ * This specifies the minimum number of application processes that
79
+ * should exist for a given application. You should set this option
80
+ * to a non-zero value if you want to avoid potentially long startup
81
+ * times after a website has been idle for an extended period.
82
+ *
83
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMinInstances
84
+ * @optional
85
+ * @default 1
86
+ */
87
+ // "min_instances": 10
88
+
89
+ /**
90
+ * The maximum number of requests an application process will
91
+ * process. After serving that many requests, the application
92
+ * process will be shut down and Phusion Passenger will restart it.
93
+ *
94
+ * @see http://www.modrails.com/documentation/Users%20guide%20Nginx%204.0.html#PassengerMaxRequests
95
+ * @optional
96
+ * @default 0
97
+ */
98
+ // "max_requests": 10000
99
+ }
100
+ }
@@ -1,2 +1,3 @@
1
1
  http {
2
+ passenger_default_user root;
2
3
  }
@@ -3,7 +3,53 @@ require 'spec_helper'
3
3
  describe Rda::App do
4
4
  subject { Rda::App.new }
5
5
 
6
- before(:all) { Dir.chdir(File.join(File.dirname(__FILE__), '../../dummy')) }
6
+ let(:app_dir) { File.join(File.dirname(__FILE__), '../../dummy') }
7
+ let(:nginx_conf_dir) { File.join(File.dirname(__FILE__), '../../tmp') }
8
+
9
+ before { Rda::Rails.should_receive(:root).any_number_of_times.and_return(app_dir) }
10
+
11
+ describe '#deploy' do
12
+ before do
13
+ Rda.stub_chain(:config, :domain).and_return('dummy.local')
14
+ Rda.stub_chain(:config, :rails_env).and_return('development')
15
+ Rda.stub_chain(:config, :nginx, :conf_dir).and_return(nginx_conf_dir)
16
+ Rda.stub_chain(:config, :passenger).and_return(:user => 'root', :group => 'root')
17
+ end
18
+
19
+ context 'when nginx is not set up' do
20
+ it 'prompts that nginx is not set up' do
21
+ capture(:stderr) do
22
+ subject.deploy
23
+ end.should == <<-PROMPT
24
+ ERROR: Nginx is not set up properly. Please run `rda nginx setup` first.
25
+ PROMPT
26
+ end
27
+ end
28
+
29
+ context 'when nginx is set up properly' do
30
+ before do
31
+ `mkdir -p #{nginx_conf_dir}/sites-available`
32
+ `mkdir -p #{nginx_conf_dir}/sites-enabled`
33
+
34
+ subject.should_receive(:append_file).with('/etc/hosts', "127.0.0.1 dummy.local\n").any_number_of_times
35
+
36
+ subject.deploy
37
+ end
38
+
39
+ after do
40
+ `rm -fr #{nginx_conf_dir}/sites-available`
41
+ `rm -fr #{nginx_conf_dir}/sites-enabled`
42
+ end
43
+
44
+ it 'creates a virtual host config file in nginx' do
45
+ File.should be_exists(File.join(nginx_conf_dir, 'sites-available/dummy.local'))
46
+ end
47
+
48
+ it 'enables the created virtual host' do
49
+ File.should be_exists(File.join(nginx_conf_dir, 'sites-enabled/dummy.local'))
50
+ end
51
+ end
52
+ end
7
53
 
8
54
  describe '#restart' do
9
55
  it 'touches restart.txt' do
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rda::Command do
4
+ subject { Rda::Command.new }
5
+
6
+ describe '#init' do
7
+ let(:tmp_path) { File.join(File.dirname(__FILE__), '../../tmp') }
8
+
9
+ before do
10
+ Rda::Rails.should_receive(:app_name).any_number_of_times.and_return('dummy')
11
+ Rda::Rails.should_receive(:root).any_number_of_times.and_return(tmp_path)
12
+ end
13
+
14
+ after { `rm -f #{Rda::Rails.root}/.rda` }
15
+
16
+ it 'creates a file named .rda' do
17
+ subject.init
18
+
19
+ File.should be_exists("#{Rda::Rails.root}/.rda")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rda::Helper do
4
+ class MyClass
5
+ include Rda::Helper
6
+ end
7
+
8
+ let(:obj) { MyClass.new }
9
+ let(:file) { File.join(File.dirname(__FILE__), '../../fixtures/nginx.conf') }
10
+
11
+ describe '#configured?' do
12
+ it 'returns true if the specified option is configured' do
13
+ obj.should be_configured file, "passenger_default_user root;"
14
+ end
15
+ end
16
+ end
@@ -3,82 +3,24 @@ require 'spec_helper'
3
3
  describe Rda::Nginx do
4
4
  subject { Rda::Nginx.new }
5
5
 
6
- before do
7
- Rda.configure { nginx_conf_paths ['/etc/nginx', '/usr/local/nginx/conf', '/opt/nginx/conf'] }
8
-
9
- Dir.chdir(File.join(File.dirname(__FILE__), '../../dummy'))
10
- end
6
+ let(:app_dir) { File.join(File.dirname(__FILE__), '../../dummy') }
11
7
 
12
8
  describe '#setup' do
13
- context 'when nginx is not found' do
9
+ context 'when the config file of nginx is not found' do
14
10
  before do
15
- File.should_receive(:directory?).with('/etc/nginx').and_return(false)
16
- File.should_receive(:directory?).with('/usr/local/nginx/conf').and_return(false)
17
- File.should_receive(:directory?).with('/opt/nginx/conf').and_return(false)
11
+ Rda::Rails.should_receive(:app_name).any_number_of_times.and_return('dummy')
12
+ Rda::Rails.should_receive(:root).any_number_of_times.and_return(app_dir)
13
+
14
+ File.should_receive(:exists?).with('/opt/nginx/conf/nginx.conf').and_return(false)
18
15
  end
19
16
 
20
- it 'prompts nginx is not found' do
17
+ it 'prompts `nginx.conf` is not found' do
21
18
  capture(:stderr) do
22
19
  subject.setup
23
20
  end.should == <<-PROMPT
24
- ERROR: Config directory of Nginx is not found in the following paths:
25
-
26
- * /etc/nginx
27
- * /usr/local/nginx/conf
28
- * /opt/nginx/conf
29
-
21
+ ERROR: Missing `nginx.conf` in `/opt/nginx/conf`.
30
22
  PROMPT
31
23
  end
32
24
  end
33
-
34
- context 'when found more than one config directory of nginx' do
35
- before do
36
- File.should_receive(:directory?).with('/etc/nginx').and_return(true)
37
- File.should_receive(:directory?).with('/usr/local/nginx/conf').and_return(true)
38
- File.should_receive(:directory?).with('/opt/nginx/conf').and_return(false)
39
- end
40
-
41
- it 'asks to choose one path' do
42
- choice = <<-CHOICE
43
- 1) /etc/nginx
44
- 2) /usr/local/nginx/conf
45
-
46
- Found more than one config directory of Nginx, please choose one to setup:
47
- CHOICE
48
-
49
- $stdin.should_receive(:gets).and_return('\n')
50
-
51
- capture(:stdout) do
52
- subject.setup
53
- end.strip.should == choice.strip
54
- end
55
- end
56
- end
57
-
58
- describe '#discard' do
59
- let(:dummy_path) { File.dirname(__FILE__) + "/../../tmp/nginx" }
60
-
61
- before do
62
- FileUtils.mkdir_p dummy_path unless File.directory?(dummy_path)
63
- FileUtils.copy_file(File.dirname(__FILE__) + "/../../fixtures/nginx.conf", dummy_path + '/nginx.conf')
64
- Rda.configure { nginx_conf_paths [File.dirname(__FILE__) + "/../../tmp/nginx"] }
65
- end
66
-
67
- after do
68
- conf = Rda.config.nginx_conf_paths.first
69
- FileUtils.rm_r conf if File.directory?(conf)
70
-
71
- Rda.configure { nginx_conf_paths ['/etc/nginx', '/usr/local/nginx/conf', '/opt/nginx/conf'] }
72
- end
73
-
74
- it 'discards the settings' do
75
- subject.should_receive(:gsub_file).with("/etc/hosts", "127.0.0.1 dummy.local", '')
76
- %W(enabled available).each do |n|
77
- subject.should_receive(:remove_file).with("#{dummy_path}/sites-#{n}/dummy.local")
78
- end
79
- subject.should_receive(:remove_file).with("#{Rda::Rails.root}/config/setup_load_paths.rb")
80
-
81
- subject.discard
82
- end
83
25
  end
84
26
  end
@@ -17,6 +17,7 @@ describe Rda::Rvm do
17
17
 
18
18
  after(:all) do
19
19
  `rm -f #{Rda::Rails.root}/.rvmrc`
20
+ `rm -f #{Rda::Rails.root}/config/setup_load_paths.rb`
20
21
 
21
22
  ENV['rvm_path'] = @rvm_path
22
23
  end
@@ -25,6 +26,10 @@ describe Rda::Rvm do
25
26
  File.should be_exists("#{Rda::Rails.root}/.rvmrc")
26
27
  end
27
28
 
29
+ it 'sets up loading paths' do
30
+ File.should be_exists("#{Rda::Rails.root}/config/setup_load_paths.rb")
31
+ end
32
+
28
33
  describe 'checking the contents of .rvmrc' do
29
34
  before { @contents = File.read("#{Rda::Rails.root}/.rvmrc") }
30
35
 
@@ -41,7 +46,7 @@ fi
41
46
  end
42
47
  end
43
48
  end
44
-
49
+
45
50
  context 'when RVM is not installed' do
46
51
  before do
47
52
  subject.should_receive(:installed?).and_return(false)
@@ -52,7 +57,10 @@ fi
52
57
  it 'does not create .rvmrc' do
53
58
  File.should_not be_exists("#{Rda::Rails.root}/.rvmrc")
54
59
  end
55
- end
56
60
 
61
+ it 'does not create `setup_load_paths`' do
62
+ File.should_not be_exists("#{Rda::Rails.root}/config/setup_load_paths.rb")
63
+ end
64
+ end
57
65
  end
58
66
  end
data/spec/lib/rda_spec.rb CHANGED
@@ -2,19 +2,30 @@ require 'spec_helper'
2
2
 
3
3
  describe Rda do
4
4
  describe '.config' do
5
+ let(:dummy_path) { File.join(File.dirname(__FILE__), '../dummy') }
6
+
7
+ before do
8
+ Rda::Rails.should_receive(:root).any_number_of_times.and_return(dummy_path)
9
+ end
10
+
5
11
  subject { Rda.config }
6
12
 
7
13
  it { should be_a(Confstruct::Configuration) }
14
+
15
+ its(:domain) { should == 'dummy.local' }
16
+ its(:rails_env) { should == 'development' }
17
+ specify { subject.nginx.conf_dir.should == '/opt/nginx/conf' }
18
+ specify { subject.passenger.user.should == 'root' }
19
+ specify { subject.passenger.group.should == 'root' }
8
20
  end
9
21
 
10
22
  describe '.configure' do
11
23
  it 'sets the config paths of nginx' do
12
24
  Rda.configure do
13
- nginx_conf_paths ['/tmp/rda/nginx/conf']
25
+ rails_env 'production'
14
26
  end
15
27
 
16
- Rda.config.nginx_conf_paths.should have(1).item
17
- Rda.config.nginx_conf_paths.should include('/tmp/rda/nginx/conf')
28
+ Rda.config.rails_env.should == 'production'
18
29
  end
19
30
  end
20
31
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
5
- prerelease:
4
+ version: 0.4.0.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tower He
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-09 00:00:00.000000000 Z
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: '1.1'
85
+ version: '2.1'
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: '1.1'
93
+ version: '2.1'
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: fivemat
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,22 @@ dependencies:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0.2'
174
+ - !ruby/object:Gem::Dependency
175
+ name: oj
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 1.4.4
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 1.4.4
174
190
  description: Rda(Rails Development Assist) is combined with lots of useful commands
175
191
  which can help you to setup your development enviroments and tools more quickly.
176
192
  email:
@@ -182,6 +198,7 @@ extra_rdoc_files: []
182
198
  files:
183
199
  - .gitignore
184
200
  - .rspec
201
+ - .travis.yml
185
202
  - CHANGELOG.md
186
203
  - Gemfile
187
204
  - Gemfile.lock
@@ -192,18 +209,24 @@ files:
192
209
  - bin/rda
193
210
  - lib/rda.rb
194
211
  - lib/rda/app.rb
212
+ - lib/rda/command.rb
213
+ - lib/rda/helper.rb
195
214
  - lib/rda/nginx.rb
196
215
  - lib/rda/rails.rb
197
216
  - lib/rda/rvm.rb
198
217
  - lib/rda/templates/nginx
218
+ - lib/rda/templates/rda.json
199
219
  - lib/rda/templates/rvmrc
200
220
  - lib/rda/templates/setup_load_paths.rb
201
221
  - lib/rda/version.rb
202
222
  - rda.gemspec
203
223
  - rvmrc.example
224
+ - spec/dummy/.rda
204
225
  - spec/dummy/config.ru
205
226
  - spec/fixtures/nginx.conf
206
227
  - spec/lib/rda/app_spec.rb
228
+ - spec/lib/rda/command_spec.rb
229
+ - spec/lib/rda/helper_spec.rb
207
230
  - spec/lib/rda/nginx_spec.rb
208
231
  - spec/lib/rda/rails_spec.rb
209
232
  - spec/lib/rda/rvm_spec.rb
@@ -223,16 +246,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
223
246
  version: '0'
224
247
  segments:
225
248
  - 0
226
- hash: -3989471672367132046
249
+ hash: -4551379883523660910
227
250
  required_rubygems_version: !ruby/object:Gem::Requirement
228
251
  none: false
229
252
  requirements:
230
- - - ! '>='
253
+ - - ! '>'
231
254
  - !ruby/object:Gem::Version
232
- version: '0'
233
- segments:
234
- - 0
235
- hash: -3989471672367132046
255
+ version: 1.3.1
236
256
  requirements: []
237
257
  rubyforge_project:
238
258
  rubygems_version: 1.8.24
@@ -240,9 +260,12 @@ signing_key:
240
260
  specification_version: 3
241
261
  summary: Rails Development Assist
242
262
  test_files:
263
+ - spec/dummy/.rda
243
264
  - spec/dummy/config.ru
244
265
  - spec/fixtures/nginx.conf
245
266
  - spec/lib/rda/app_spec.rb
267
+ - spec/lib/rda/command_spec.rb
268
+ - spec/lib/rda/helper_spec.rb
246
269
  - spec/lib/rda/nginx_spec.rb
247
270
  - spec/lib/rda/rails_spec.rb
248
271
  - spec/lib/rda/rvm_spec.rb