passenger 3.9.2.beta → 4.0.0.rc4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (159) hide show
  1. data/.travis.yml +3 -0
  2. data/NEWS +77 -7
  3. data/README.md +3 -11
  4. data/bin/passenger-install-apache2-module +24 -20
  5. data/bin/passenger-install-nginx-module +25 -23
  6. data/build/agents.rb +11 -0
  7. data/build/apache2.rb +9 -5
  8. data/build/basics.rb +37 -30
  9. data/build/common_library.rb +4 -1
  10. data/build/cplusplus_support.rb +5 -5
  11. data/build/cxx_tests.rb +28 -8
  12. data/build/integration_tests.rb +6 -3
  13. data/build/nginx.rb +3 -3
  14. data/build/packaging.rb +95 -57
  15. data/build/ruby_extension.rb +34 -21
  16. data/build/ruby_tests.rb +4 -2
  17. data/build/test_basics.rb +1 -1
  18. data/dev/run_travis.sh +36 -1
  19. data/doc/Users guide Apache.html +425 -308
  20. data/doc/Users guide Apache.idmap.txt +78 -70
  21. data/doc/Users guide Apache.index.sqlite3 +0 -0
  22. data/doc/Users guide Apache.txt +33 -92
  23. data/doc/Users guide Nginx.html +519 -220
  24. data/doc/Users guide Nginx.idmap.txt +78 -60
  25. data/doc/Users guide Nginx.txt +115 -26
  26. data/doc/Users guide Standalone.html +8 -2
  27. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +1 -7
  28. data/doc/users_guide_snippets/installation.txt +167 -22
  29. data/doc/users_guide_snippets/rackup_specifications.txt +4 -0
  30. data/doc/users_guide_snippets/since_version.txt +1 -0
  31. data/doc/users_guide_snippets/support_information.txt +3 -7
  32. data/doc/users_guide_snippets/tips.txt +0 -24
  33. data/ext/apache2/Configuration.cpp +11 -33
  34. data/ext/apache2/Configuration.hpp +3 -18
  35. data/ext/apache2/DirectoryMapper.h +20 -70
  36. data/ext/apache2/Hooks.cpp +2 -2
  37. data/ext/common/AgentsStarter.cpp +0 -2
  38. data/ext/common/AgentsStarter.h +0 -1
  39. data/ext/common/AgentsStarter.hpp +1 -3
  40. data/ext/common/ApplicationPool2/AppTypes.cpp +74 -0
  41. data/ext/common/ApplicationPool2/AppTypes.h +202 -0
  42. data/ext/common/ApplicationPool2/Common.h +12 -10
  43. data/ext/common/ApplicationPool2/DirectSpawner.h +256 -0
  44. data/ext/common/ApplicationPool2/DummySpawner.h +90 -0
  45. data/ext/common/ApplicationPool2/Group.h +311 -94
  46. data/ext/common/ApplicationPool2/Implementation.cpp +405 -145
  47. data/ext/common/ApplicationPool2/Options.h +24 -26
  48. data/ext/common/ApplicationPool2/PipeWatcher.h +20 -13
  49. data/ext/common/ApplicationPool2/Pool.h +326 -183
  50. data/ext/common/ApplicationPool2/Process.h +205 -55
  51. data/ext/common/ApplicationPool2/README.md +1 -1
  52. data/ext/common/ApplicationPool2/Session.h +21 -10
  53. data/ext/common/ApplicationPool2/SmartSpawner.h +801 -0
  54. data/ext/common/ApplicationPool2/Spawner.h +141 -1149
  55. data/ext/common/ApplicationPool2/SpawnerFactory.h +132 -0
  56. data/ext/common/ApplicationPool2/SuperGroup.h +146 -223
  57. data/ext/common/Constants.h +4 -2
  58. data/ext/common/Exceptions.h +23 -1
  59. data/ext/common/Logging.cpp +17 -6
  60. data/ext/common/Logging.h +37 -7
  61. data/ext/common/ResourceLocator.h +1 -1
  62. data/ext/common/Utils.cpp +49 -1
  63. data/ext/common/Utils.h +13 -4
  64. data/ext/common/{AnsiColorConstants.h → Utils/AnsiColorConstants.h} +0 -0
  65. data/ext/common/{BCrypt.cpp → Utils/BCrypt.cpp} +0 -0
  66. data/ext/common/{BCrypt.h → Utils/BCrypt.h} +0 -0
  67. data/ext/common/{Blowfish.c → Utils/Blowfish.c} +0 -0
  68. data/ext/common/{Blowfish.h → Utils/Blowfish.h} +0 -0
  69. data/ext/common/Utils/CachedFileStat.hpp +27 -25
  70. data/ext/common/Utils/Curl.h +184 -0
  71. data/ext/common/{HttpConstants.h → Utils/HttpConstants.h} +3 -0
  72. data/ext/common/Utils/IOUtils.cpp +6 -2
  73. data/ext/common/{IniFile.h → Utils/IniFile.h} +0 -0
  74. data/ext/common/Utils/LargeFiles.cpp +30 -0
  75. data/ext/common/Utils/LargeFiles.h +40 -0
  76. data/ext/common/Utils/StrIntUtils.cpp +72 -8
  77. data/ext/common/Utils/StrIntUtils.h +24 -2
  78. data/ext/common/Utils/StringMap.h +12 -2
  79. data/ext/common/Utils/VariantMap.h +51 -2
  80. data/ext/common/Utils/jsoncpp.cpp +1 -1
  81. data/ext/common/agents/Base.cpp +147 -11
  82. data/ext/common/agents/HelperAgent/AgentOptions.h +14 -6
  83. data/ext/common/agents/HelperAgent/Main.cpp +79 -19
  84. data/ext/common/agents/HelperAgent/RequestHandler.h +36 -16
  85. data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -5
  86. data/ext/common/agents/LoggingAgent/Main.cpp +2 -4
  87. data/ext/common/agents/LoggingAgent/RemoteSender.h +18 -24
  88. data/ext/common/agents/SpawnPreparer.cpp +7 -0
  89. data/ext/common/agents/Watchdog/Main.cpp +96 -38
  90. data/ext/nginx/Configuration.c +26 -22
  91. data/ext/nginx/Configuration.h +4 -2
  92. data/ext/nginx/ContentHandler.c +23 -52
  93. data/ext/nginx/ContentHandler.h +5 -11
  94. data/ext/nginx/config +10 -3
  95. data/ext/nginx/ngx_http_passenger_module.c +21 -6
  96. data/ext/nginx/ngx_http_passenger_module.h +4 -1
  97. data/ext/oxt/dynamic_thread_group.hpp +9 -1
  98. data/ext/oxt/system_calls.cpp +2 -2
  99. data/ext/ruby/extconf.rb +2 -1
  100. data/helper-scripts/backtrace-sanitizer.rb +2 -0
  101. data/helper-scripts/wsgi-loader.py +54 -21
  102. data/lib/phusion_passenger.rb +5 -3
  103. data/lib/phusion_passenger/abstract_installer.rb +18 -41
  104. data/lib/phusion_passenger/admin_tools/memory_stats.rb +2 -2
  105. data/lib/phusion_passenger/admin_tools/server_instance.rb +2 -2
  106. data/lib/phusion_passenger/common_library.rb +23 -3
  107. data/lib/phusion_passenger/debug_logging.rb +10 -3
  108. data/lib/phusion_passenger/packaging.rb +1 -0
  109. data/lib/phusion_passenger/platform_info.rb +113 -115
  110. data/lib/phusion_passenger/platform_info/compiler.rb +224 -134
  111. data/lib/phusion_passenger/platform_info/cxx_portability.rb +143 -0
  112. data/lib/phusion_passenger/platform_info/depcheck.rb +371 -0
  113. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +124 -0
  114. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +97 -0
  115. data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +39 -0
  116. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +118 -0
  117. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +137 -0
  118. data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +15 -0
  119. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -5
  120. data/lib/phusion_passenger/platform_info/ruby.rb +45 -34
  121. data/lib/phusion_passenger/request_handler.rb +35 -22
  122. data/lib/phusion_passenger/request_handler/thread_handler.rb +5 -6
  123. data/lib/phusion_passenger/ruby_core_enhancements.rb +7 -1
  124. data/lib/phusion_passenger/standalone/runtime_installer.rb +43 -34
  125. data/lib/phusion_passenger/utils/robust_interruption.rb +34 -18
  126. data/passenger.gemspec +25 -0
  127. data/resources/templates/standalone/config.erb +3 -1
  128. data/test/config.json.travis +2 -2
  129. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +37 -5
  130. data/test/cxx/ApplicationPool2/PoolTest.cpp +143 -50
  131. data/test/cxx/ApplicationPool2/ProcessTest.cpp +8 -0
  132. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +28 -17
  133. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +31 -26
  134. data/test/cxx/RequestHandlerTest.cpp +17 -1
  135. data/test/cxx/UtilsTest.cpp +84 -10
  136. data/test/integration_tests/apache2_tests.rb +49 -163
  137. data/test/integration_tests/hello_world_wsgi_spec.rb +2 -2
  138. data/test/integration_tests/mycook_spec.rb +1 -1
  139. data/test/integration_tests/nginx_tests.rb +37 -19
  140. data/test/ruby/request_handler_spec.rb +1 -0
  141. data/test/ruby/spec_helper.rb +52 -1
  142. data/test/stub/nginx/nginx.conf.erb +2 -0
  143. data/test/stub/rack/start.rb +5 -0
  144. data/test/stub/rails3.0/Gemfile.lock +30 -30
  145. data/test/stub/rails3.1/Gemfile +1 -1
  146. data/test/stub/rails3.1/Gemfile.lock +3 -3
  147. data/test/stub/rails3.2/Gemfile +1 -1
  148. data/test/stub/rails3.2/Gemfile.lock +4 -4
  149. data/test/stub/rails_apps/2.3/mycook/app/controllers/welcome_controller.rb +1 -1
  150. data/test/stub/rails_apps/2.3/mycook/app/helpers/recipes_helper.rb +2 -0
  151. data/test/stub/rails_apps/2.3/mycook/app/helpers/test_helper.rb +2 -0
  152. data/test/stub/rails_apps/2.3/mycook/app/helpers/uploads_helper.rb +2 -0
  153. data/test/stub/rails_apps/2.3/mycook/app/helpers/welcome_helper.rb +2 -0
  154. data/test/support/nginx_controller.rb +2 -1
  155. metadata +160 -156
  156. data/build/gempackagetask.rb +0 -99
  157. data/build/packagetask.rb +0 -186
  158. data/ext/common/StringListCreator.h +0 -83
  159. data/lib/phusion_passenger/dependencies.rb +0 -657
@@ -8,11 +8,11 @@ shared_examples_for "HelloWorld WSGI application" do
8
8
  end
9
9
 
10
10
  it "is possible to GET a regular WSGI page" do
11
- get('/').should =~ /Hello World/
11
+ get('/').should include("hello <b>world</b>")
12
12
  end
13
13
 
14
14
  it "supports restarting via restart.txt" do
15
- get('/').should =~ /Hello World/
15
+ get('/').should include("hello <b>world</b>")
16
16
 
17
17
  code = %q{
18
18
  def application(env, start_response):
@@ -148,7 +148,7 @@ shared_examples_for "MyCook(tm) beta" do
148
148
 
149
149
  it "sets the 'Status' header" do
150
150
  response = get_response('/nonexistant')
151
- response["Status"].should == "404"
151
+ response["Status"].should == "404 Not Found"
152
152
  end
153
153
 
154
154
  if Process.uid == 0
@@ -13,20 +13,12 @@ describe "Phusion Passenger for Nginx" do
13
13
  end
14
14
 
15
15
  check_hosts_configuration
16
- @nginx = NginxController.new("tmp.nginx")
17
- if Process.uid == 0
18
- @nginx.set(
19
- :www_user => CONFIG['normal_user_1'],
20
- :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
21
- )
22
- end
23
-
24
16
  FileUtils.mkdir_p("tmp.nginx")
25
17
  end
26
18
 
27
19
  after :all do
28
20
  begin
29
- @nginx.stop
21
+ @nginx.stop if @nginx
30
22
  ensure
31
23
  FileUtils.rm_rf("tmp.nginx")
32
24
  end
@@ -36,15 +28,26 @@ describe "Phusion Passenger for Nginx" do
36
28
  File.open("test.log", "a") do |f|
37
29
  # Make sure that all Nginx log output is prepended by the test description
38
30
  # so that we know which messages are associated with which tests.
39
- f.puts "\n#### #{self.class.description} : #{description}"
31
+ f.puts "\n#### #{Time.now}: #{example.full_description}"
40
32
  end
41
33
  end
42
-
34
+
35
+ def create_nginx_controller(options = {})
36
+ @nginx = NginxController.new("tmp.nginx")
37
+ if Process.uid == 0
38
+ @nginx.set({
39
+ :www_user => CONFIG['normal_user_1'],
40
+ :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
41
+ }.merge(options))
42
+ end
43
+ end
44
+
43
45
  describe "MyCook(tm) beta running a root URI" do
44
46
  before :all do
47
+ create_nginx_controller
45
48
  @server = "http://1.passenger.test:#{@nginx.port}"
46
49
  @base_uri = ""
47
- @stub = RailsStub.new('2.3/mycook')
50
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
48
51
  @nginx.add_server do |server|
49
52
  server[:server_name] = "1.passenger.test"
50
53
  server[:root] = "#{@stub.full_app_root}/public"
@@ -54,6 +57,7 @@ describe "Phusion Passenger for Nginx" do
54
57
 
55
58
  after :all do
56
59
  @stub.destroy
60
+ @nginx.stop if @nginx
57
61
  end
58
62
 
59
63
  before :each do
@@ -61,18 +65,19 @@ describe "Phusion Passenger for Nginx" do
61
65
  end
62
66
 
63
67
  it_should_behave_like "MyCook(tm) beta"
64
- include_shared_example_group "CGI environment variables compliance"
68
+ include_examples "CGI environment variables compliance"
65
69
  end
66
70
 
67
71
  describe "MyCook(tm) beta running in a sub-URI" do
68
72
  before :all do
69
73
  @base_uri = "/mycook"
70
- @stub = RailsStub.new('2.3/mycook')
74
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
71
75
  FileUtils.rm_rf('tmp.webdir')
72
76
  FileUtils.mkdir_p('tmp.webdir')
73
77
  FileUtils.cp_r('stub/zsfa/.', 'tmp.webdir')
74
78
  FileUtils.ln_sf(@stub.full_app_root + "/public", 'tmp.webdir/mycook')
75
79
 
80
+ create_nginx_controller
76
81
  @nginx.add_server do |server|
77
82
  server[:server_name] = "1.passenger.test"
78
83
  server[:root] = File.expand_path("tmp.webdir")
@@ -84,15 +89,16 @@ describe "Phusion Passenger for Nginx" do
84
89
  after :all do
85
90
  FileUtils.rm_rf('tmp.webdir')
86
91
  @stub.destroy
92
+ @nginx.stop if @nginx
87
93
  end
88
94
 
89
95
  before :each do
90
96
  @server = "http://1.passenger.test:#{@nginx.port}/mycook"
91
97
  @stub.reset
92
98
  end
93
-
99
+
94
100
  it_should_behave_like "MyCook(tm) beta"
95
- include_shared_example_group "CGI environment variables compliance"
101
+ include_examples "CGI environment variables compliance"
96
102
 
97
103
  it "does not interfere with the root website" do
98
104
  @server = "http://1.passenger.test:#{@nginx.port}"
@@ -102,6 +108,7 @@ describe "Phusion Passenger for Nginx" do
102
108
 
103
109
  describe "Rack application running in root URI" do
104
110
  before :all do
111
+ create_nginx_controller
105
112
  @server = "http://passenger.test:#{@nginx.port}"
106
113
  @stub = RackStub.new('rack')
107
114
  @nginx.add_server do |server|
@@ -114,6 +121,7 @@ describe "Phusion Passenger for Nginx" do
114
121
 
115
122
  after :all do
116
123
  @stub.destroy
124
+ @nginx.stop if @nginx
117
125
  end
118
126
 
119
127
  before :each do
@@ -128,6 +136,7 @@ describe "Phusion Passenger for Nginx" do
128
136
  FileUtils.rm_rf('tmp.webdir')
129
137
  FileUtils.mkdir_p('tmp.webdir')
130
138
  @stub = RackStub.new('rack')
139
+ create_nginx_controller
131
140
  @nginx.add_server do |server|
132
141
  FileUtils.ln_s(@stub.full_app_root + "/public", 'tmp.webdir/rack')
133
142
  server[:server_name] = "passenger.test"
@@ -141,6 +150,7 @@ describe "Phusion Passenger for Nginx" do
141
150
  after :all do
142
151
  @stub.destroy
143
152
  FileUtils.rm_rf('tmp.webdir')
153
+ @nginx.stop if @nginx
144
154
  end
145
155
 
146
156
  before :each do
@@ -152,8 +162,9 @@ describe "Phusion Passenger for Nginx" do
152
162
 
153
163
  describe "Rack application running within Rails directory structure" do
154
164
  before :all do
165
+ create_nginx_controller
155
166
  @server = "http://passenger.test:#{@nginx.port}"
156
- @stub = RailsStub.new('2.3/mycook')
167
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
157
168
  FileUtils.cp_r("stub/rack/.", @stub.app_root)
158
169
  @nginx.add_server do |server|
159
170
  server[:server_name] = "passenger.test"
@@ -164,6 +175,7 @@ describe "Phusion Passenger for Nginx" do
164
175
 
165
176
  after :all do
166
177
  @stub.destroy
178
+ @nginx.stop if @nginx
167
179
  end
168
180
 
169
181
  before :each do
@@ -176,6 +188,7 @@ describe "Phusion Passenger for Nginx" do
176
188
 
177
189
  describe "various features" do
178
190
  before :all do
191
+ create_nginx_controller
179
192
  @server = "http://passenger.test:#{@nginx.port}"
180
193
  @stub = RackStub.new('rack')
181
194
  @nginx.add_server do |server|
@@ -203,6 +216,7 @@ describe "Phusion Passenger for Nginx" do
203
216
 
204
217
  after :all do
205
218
  @stub.destroy
219
+ @nginx.stop if @nginx
206
220
  end
207
221
 
208
222
  before :each do
@@ -263,8 +277,8 @@ describe "Phusion Passenger for Nginx" do
263
277
  end
264
278
 
265
279
  describe "oob work" do
266
-
267
280
  before :all do
281
+ create_nginx_controller
268
282
  @server = "http://passenger.test:#{@nginx.port}"
269
283
  @stub = RackStub.new('rack')
270
284
  @nginx.add_server do |server|
@@ -272,6 +286,11 @@ describe "Phusion Passenger for Nginx" do
272
286
  server[:root] = "#{@stub.full_app_root}/public"
273
287
  end
274
288
  end
289
+
290
+ after :all do
291
+ @stub.destroy
292
+ @nginx.stop if @nginx
293
+ end
275
294
 
276
295
  before :each do
277
296
  @stub.reset
@@ -308,7 +327,6 @@ describe "Phusion Passenger for Nginx" do
308
327
  secs = Time.now - t0
309
328
  secs.should <= 0.1
310
329
  end
311
-
312
330
  end
313
331
 
314
332
  ##### Helper methods #####
@@ -214,6 +214,7 @@ describe RequestHandler do
214
214
  send_binary_request(client,
215
215
  "REQUEST_METHOD" => "GET",
216
216
  "PATH_INFO" => "/")
217
+ sleep 0.1 # Give it some time to handle the request.
217
218
  stop_request_handler
218
219
  client.read.should == "Hijacked response!"
219
220
  ensure
@@ -22,11 +22,14 @@ AGENTS_DIR = "#{source_root}/agents"
22
22
  $LOAD_PATH.unshift("#{source_root}/lib")
23
23
  $LOAD_PATH.unshift("#{source_root}/test")
24
24
 
25
+ require 'thread'
26
+ require 'timeout'
25
27
  require 'fileutils'
26
28
  require 'support/test_helper'
27
29
  require 'phusion_passenger'
28
30
  PhusionPassenger.locate_directories
29
31
  require 'phusion_passenger/debug_logging'
32
+ require 'phusion_passenger/utils'
30
33
  require 'phusion_passenger/utils/tmpdir'
31
34
 
32
35
  include TestHelper
@@ -36,9 +39,54 @@ include TestHelper
36
39
  srand
37
40
 
38
41
  trap "QUIT" do
39
- puts caller
42
+ STDERR.puts PhusionPassenger::Utils.global_backtrace_report
40
43
  end
41
44
 
45
+ class DeadlineTimer
46
+ def initialize(main_thread, deadline)
47
+ @mutex = Mutex.new
48
+ @cond = ConditionVariable.new
49
+ @iteration = 0
50
+ @pipe = IO.pipe
51
+
52
+ @thread = Thread.new do
53
+ Thread.current.abort_on_exception = true
54
+ expected_iteration = 1
55
+ ios = [@pipe[0]]
56
+ while true
57
+ @mutex.synchronize do
58
+ while @iteration != expected_iteration
59
+ @cond.wait(@mutex)
60
+ end
61
+ end
62
+ if !select(ios, nil, nil, deadline)
63
+ STDERR.puts "*** Test timed out (#{deadline} seconds)"
64
+ STDERR.puts PhusionPassenger::Utils.global_backtrace_report
65
+ main_thread.raise(Timeout::Error, "Test timed out")
66
+ expected_iteration += 1
67
+ elsif @pipe[0].read(1).nil?
68
+ break
69
+ else
70
+ expected_iteration += 1
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ def start
77
+ @mutex.synchronize do
78
+ @iteration += 1
79
+ @cond.signal
80
+ end
81
+ end
82
+
83
+ def stop
84
+ @pipe[1].write('x')
85
+ end
86
+ end
87
+
88
+ DEADLINE_TIMER = DeadlineTimer.new(Thread.current, 30)
89
+
42
90
  RSpec.configure do |config|
43
91
  config.before(:each) do
44
92
  # Suppress warning messages.
@@ -48,6 +96,8 @@ RSpec.configure do |config|
48
96
 
49
97
  # Create the temp directory.
50
98
  PhusionPassenger::Utils.passenger_tmpdir
99
+
100
+ DEADLINE_TIMER.start
51
101
  end
52
102
 
53
103
  config.after(:each) do
@@ -55,5 +105,6 @@ RSpec.configure do |config|
55
105
  if File.exist?(tmpdir)
56
106
  remove_dir_tree(tmpdir)
57
107
  end
108
+ DEADLINE_TIMER.stop
58
109
  end
59
110
  end
@@ -22,6 +22,8 @@ http {
22
22
  passenger_ruby <%= PlatformInfo.ruby_command %>;
23
23
  passenger_default_user <%= CONFIG['default_user'] %>;
24
24
  passenger_default_group <%= CONFIG['default_group'] %>;
25
+ passenger_max_pool_size <%= @max_pool_size %>;
26
+ passenger_log_level 3;
25
27
 
26
28
  <% for server in @servers %>
27
29
  server {
@@ -12,6 +12,11 @@ while (line = STDIN.readline) != "\n"
12
12
  options[name] = value
13
13
  end
14
14
 
15
+ if ARGV[0] == "--execself"
16
+ # Used for testing https://code.google.com/p/phusion-passenger/issues/detail?id=842#c19
17
+ exec("ruby", $0)
18
+ end
19
+
15
20
  server = TCPServer.new('127.0.0.1', 0)
16
21
  puts "!> Ready"
17
22
  puts "!> socket: main;tcp://127.0.0.1:#{server.addr[1]};session;1"
@@ -2,12 +2,12 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  abstract (1.0.0)
5
- actionmailer (3.0.15)
6
- actionpack (= 3.0.15)
5
+ actionmailer (3.0.20)
6
+ actionpack (= 3.0.20)
7
7
  mail (~> 2.2.19)
8
- actionpack (3.0.15)
9
- activemodel (= 3.0.15)
10
- activesupport (= 3.0.15)
8
+ actionpack (3.0.20)
9
+ activemodel (= 3.0.20)
10
+ activesupport (= 3.0.20)
11
11
  builder (~> 2.1.2)
12
12
  erubis (~> 2.6.6)
13
13
  i18n (~> 0.5.0)
@@ -15,62 +15,62 @@ GEM
15
15
  rack-mount (~> 0.6.14)
16
16
  rack-test (~> 0.5.7)
17
17
  tzinfo (~> 0.3.23)
18
- activemodel (3.0.15)
19
- activesupport (= 3.0.15)
18
+ activemodel (3.0.20)
19
+ activesupport (= 3.0.20)
20
20
  builder (~> 2.1.2)
21
21
  i18n (~> 0.5.0)
22
- activerecord (3.0.15)
23
- activemodel (= 3.0.15)
24
- activesupport (= 3.0.15)
22
+ activerecord (3.0.20)
23
+ activemodel (= 3.0.20)
24
+ activesupport (= 3.0.20)
25
25
  arel (~> 2.0.10)
26
26
  tzinfo (~> 0.3.23)
27
- activeresource (3.0.15)
28
- activemodel (= 3.0.15)
29
- activesupport (= 3.0.15)
30
- activesupport (3.0.15)
27
+ activeresource (3.0.20)
28
+ activemodel (= 3.0.20)
29
+ activesupport (= 3.0.20)
30
+ activesupport (3.0.20)
31
31
  arel (2.0.10)
32
32
  builder (2.1.2)
33
33
  erubis (2.6.6)
34
34
  abstract (>= 1.0.0)
35
35
  i18n (0.5.0)
36
- json (1.7.3)
36
+ json (1.7.6)
37
37
  mail (2.2.19)
38
38
  activesupport (>= 2.3.6)
39
39
  i18n (>= 0.4.0)
40
40
  mime-types (~> 1.16)
41
41
  treetop (~> 1.4.8)
42
- mime-types (1.18)
42
+ mime-types (1.20.1)
43
43
  polyglot (0.3.3)
44
- rack (1.2.5)
44
+ rack (1.2.7)
45
45
  rack-mount (0.6.14)
46
46
  rack (>= 1.0.0)
47
47
  rack-test (0.5.7)
48
48
  rack (>= 1.0)
49
- rails (3.0.15)
50
- actionmailer (= 3.0.15)
51
- actionpack (= 3.0.15)
52
- activerecord (= 3.0.15)
53
- activeresource (= 3.0.15)
54
- activesupport (= 3.0.15)
49
+ rails (3.0.20)
50
+ actionmailer (= 3.0.20)
51
+ actionpack (= 3.0.20)
52
+ activerecord (= 3.0.20)
53
+ activeresource (= 3.0.20)
54
+ activesupport (= 3.0.20)
55
55
  bundler (~> 1.0)
56
- railties (= 3.0.15)
57
- railties (3.0.15)
58
- actionpack (= 3.0.15)
59
- activesupport (= 3.0.15)
56
+ railties (= 3.0.20)
57
+ railties (3.0.20)
58
+ actionpack (= 3.0.20)
59
+ activesupport (= 3.0.20)
60
60
  rake (>= 0.8.7)
61
61
  rdoc (~> 3.4)
62
62
  thor (~> 0.14.4)
63
- rake (0.9.2.2)
63
+ rake (10.0.3)
64
64
  rdoc (3.12)
65
65
  json (~> 1.4)
66
66
  sqlite3 (1.3.6)
67
67
  sqlite3-ruby (1.3.3)
68
68
  sqlite3 (>= 1.3.3)
69
69
  thor (0.14.6)
70
- treetop (1.4.10)
70
+ treetop (1.4.12)
71
71
  polyglot
72
72
  polyglot (>= 0.3.1)
73
- tzinfo (0.3.33)
73
+ tzinfo (0.3.35)
74
74
 
75
75
  PLATFORMS
76
76
  ruby
@@ -1,6 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'rails', '3.1.10'
3
+ gem 'rails', '~> 3.1.10'
4
4
 
5
5
  # Bundle edge Rails instead:
6
6
  # gem 'rails', :git => 'git://github.com/rails/rails.git'
@@ -51,7 +51,7 @@ GEM
51
51
  i18n (>= 0.4.0)
52
52
  mime-types (~> 1.16)
53
53
  treetop (~> 1.4.8)
54
- mime-types (1.19)
54
+ mime-types (1.20.1)
55
55
  multi_json (1.2.0)
56
56
  polyglot (0.3.3)
57
57
  rack (1.3.9)
@@ -59,7 +59,7 @@ GEM
59
59
  rack (>= 0.4)
60
60
  rack-mount (0.8.3)
61
61
  rack (>= 1.0.0)
62
- rack-ssl (1.3.2)
62
+ rack-ssl (1.3.3)
63
63
  rack
64
64
  rack-test (0.6.2)
65
65
  rack (>= 1.0)
@@ -109,7 +109,7 @@ DEPENDENCIES
109
109
  coffee-rails (~> 3.1.1)
110
110
  jquery-rails
111
111
  json
112
- rails (= 3.1.10)
112
+ rails (~> 3.1.10)
113
113
  sass-rails (~> 3.1.5)
114
114
  sqlite3
115
115
  uglifier (>= 1.0.3)