passenger 5.0.4 → 5.0.5

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 (550) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +10 -0
  5. data/CHANGELOG +21 -0
  6. data/build/agents.rb +2 -2
  7. data/build/apache2.rb +6 -5
  8. data/build/common_library.rb +22 -7
  9. data/build/cxx_tests.rb +0 -3
  10. data/build/misc.rb +1 -1
  11. data/dev/parse_file_descriptor_log +119 -0
  12. data/doc/CloudLicensingConfiguration.html +387 -0
  13. data/doc/Design and Architecture.html +2430 -0
  14. data/doc/Packaging.html +488 -0
  15. data/doc/Security of user switching support.html +1833 -0
  16. data/doc/ServerOptimizationGuide.html +659 -0
  17. data/doc/ServerOptimizationGuide.txt.md +8 -0
  18. data/doc/Users guide Apache.html +9116 -0
  19. data/doc/Users guide Apache.idmap.txt +6 -2
  20. data/doc/Users guide Apache.txt +26 -7
  21. data/doc/Users guide Nginx.html +9025 -0
  22. data/doc/Users guide Nginx.idmap.txt +7 -3
  23. data/doc/Users guide Nginx.txt +29 -6
  24. data/doc/Users guide Standalone.html +3983 -0
  25. data/doc/Users guide.html +1748 -0
  26. data/doc/users_guide_snippets/installation.txt +4 -4
  27. data/ext/apache2/Configuration.cpp +16 -5
  28. data/ext/apache2/Configuration.hpp +4 -2
  29. data/ext/apache2/Hooks.cpp +44 -19
  30. data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
  31. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
  32. data/ext/common/AgentsStarter.h +3 -2
  33. data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
  34. data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
  35. data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
  36. data/ext/common/ApplicationPool2/Process.h +2 -1
  37. data/ext/common/ApplicationPool2/Session.h +6 -6
  38. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
  39. data/ext/common/ApplicationPool2/Socket.h +59 -27
  40. data/ext/common/ApplicationPool2/Spawner.h +2 -2
  41. data/ext/common/BackgroundEventLoop.cpp +6 -1
  42. data/ext/common/Constants.h +1 -1
  43. data/ext/common/EventedClient.h +1 -1
  44. data/ext/common/EventedServer.h +2 -2
  45. data/ext/common/FileDescriptor.h +25 -6
  46. data/ext/common/Logging.cpp +107 -52
  47. data/ext/common/Logging.h +146 -19
  48. data/ext/common/MessageClient.h +2 -2
  49. data/ext/common/MessageServer.h +3 -2
  50. data/ext/common/RandomGenerator.h +8 -7
  51. data/ext/common/SafeLibev.h +5 -1
  52. data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
  53. data/ext/common/ServerKit/FdSinkChannel.h +5 -2
  54. data/ext/common/ServerKit/FdSourceChannel.h +5 -2
  55. data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
  56. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
  57. data/ext/common/ServerKit/HttpServer.h +6 -0
  58. data/ext/common/ServerKit/Server.h +40 -3
  59. data/ext/common/StaticString.h +20 -0
  60. data/ext/common/UnionStation/Connection.h +3 -1
  61. data/ext/common/UnionStation/Core.h +6 -4
  62. data/ext/common/Utils.cpp +4 -3
  63. data/ext/common/Utils/DateParsing.h +19 -5
  64. data/ext/common/Utils/FastStringStream.h +183 -0
  65. data/ext/common/Utils/IOUtils.cpp +47 -28
  66. data/ext/common/Utils/IOUtils.h +56 -12
  67. data/ext/common/Utils/MessagePassing.h +3 -3
  68. data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
  69. data/ext/common/Utils/ScopeGuard.h +16 -5
  70. data/ext/common/Utils/SpeedMeter.h +2 -2
  71. data/ext/common/Utils/StrIntUtils.cpp +6 -6
  72. data/ext/common/Utils/StrIntUtils.h +2 -1
  73. data/ext/common/agents/Base.cpp +56 -4
  74. data/ext/common/agents/Base.h +2 -1
  75. data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
  76. data/ext/common/agents/HelperAgent/Main.cpp +16 -5
  77. data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
  78. data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
  79. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
  80. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
  81. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
  82. data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
  83. data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
  84. data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
  85. data/ext/common/agents/Watchdog/AdminServer.h +53 -11
  86. data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
  87. data/ext/common/agents/Watchdog/Main.cpp +13 -6
  88. data/ext/libeio/ecb.h +1 -1
  89. data/ext/libev/ev.c +13 -1
  90. data/ext/libev/ev.h +3 -0
  91. data/ext/nginx/Configuration.c +28 -6
  92. data/ext/nginx/Configuration.h +2 -1
  93. data/ext/nginx/ngx_http_passenger_module.c +5 -4
  94. data/ext/oxt/dynamic_thread_group.hpp +38 -5
  95. data/lib/phusion_passenger.rb +1 -1
  96. data/lib/phusion_passenger/common_library.rb +9 -5
  97. data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  98. data/lib/phusion_passenger/packaging.rb +23 -37
  99. data/passenger.gemspec +21 -21
  100. metadata +4 -453
  101. metadata.gz.asc +7 -7
  102. data/.gitignore +0 -68
  103. data/.travis.yml +0 -16
  104. data/Gemfile +0 -17
  105. data/Gemfile.lock +0 -39
  106. data/Vagrantfile +0 -54
  107. data/debian.template/README.Debian +0 -15
  108. data/debian.template/changelog +0 -316
  109. data/debian.template/compat +0 -1
  110. data/debian.template/control.erb +0 -91
  111. data/debian.template/copyright +0 -385
  112. data/debian.template/libapache2-mod-passenger.install +0 -3
  113. data/debian.template/libapache2-mod-passenger.postinst +0 -36
  114. data/debian.template/libapache2-mod-passenger.prerm +0 -15
  115. data/debian.template/locations.ini.erb +0 -14
  116. data/debian.template/passenger-dev.install.erb +0 -3
  117. data/debian.template/passenger-doc.install.erb +0 -2
  118. data/debian.template/passenger.conf +0 -6
  119. data/debian.template/passenger.docs +0 -4
  120. data/debian.template/passenger.install.erb +0 -14
  121. data/debian.template/passenger.load +0 -3
  122. data/debian.template/passenger.manpages +0 -3
  123. data/debian.template/patches/series +0 -0
  124. data/debian.template/rules.erb +0 -76
  125. data/debian.template/source/format +0 -1
  126. data/ext/common/EventedBufferedInput.h +0 -458
  127. data/packaging/rpm/LICENSE.txt +0 -19
  128. data/packaging/rpm/Makefile +0 -13
  129. data/packaging/rpm/README.md +0 -41
  130. data/packaging/rpm/Vagrantfile +0 -38
  131. data/packaging/rpm/Vagrantfile.centos +0 -30
  132. data/packaging/rpm/build +0 -170
  133. data/packaging/rpm/create_project +0 -41
  134. data/packaging/rpm/git_update +0 -88
  135. data/packaging/rpm/image/Dockerfile +0 -37
  136. data/packaging/rpm/image/Gemfile +0 -3
  137. data/packaging/rpm/image/Gemfile.lock +0 -12
  138. data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
  139. data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
  140. data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
  141. data/packaging/rpm/image/site-defaults.cfg +0 -168
  142. data/packaging/rpm/internal/build_tasks.rb +0 -238
  143. data/packaging/rpm/internal/dummygpg +0 -11
  144. data/packaging/rpm/internal/exec_build +0 -42
  145. data/packaging/rpm/internal/get_distro_arch +0 -14
  146. data/packaging/rpm/internal/get_distro_id +0 -10
  147. data/packaging/rpm/internal/git_update +0 -27
  148. data/packaging/rpm/internal/inituidgid +0 -17
  149. data/packaging/rpm/internal/my_init +0 -344
  150. data/packaging/rpm/internal/python27 +0 -3
  151. data/packaging/rpm/internal/repo_update +0 -46
  152. data/packaging/rpm/internal/setuser +0 -26
  153. data/packaging/rpm/internal/tracking_helper +0 -40
  154. data/packaging/rpm/jenkins_release +0 -99
  155. data/packaging/rpm/lib/build_tasks_support.rb +0 -402
  156. data/packaging/rpm/lib/preprocessor.rb +0 -341
  157. data/packaging/rpm/nginx_spec/404.html +0 -119
  158. data/packaging/rpm/nginx_spec/50x.html +0 -119
  159. data/packaging/rpm/nginx_spec/index.html +0 -116
  160. data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
  161. data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
  162. data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
  163. data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
  164. data/packaging/rpm/nginx_spec/nginx.conf +0 -131
  165. data/packaging/rpm/nginx_spec/nginx.init +0 -144
  166. data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
  167. data/packaging/rpm/nginx_spec/nginx.service +0 -15
  168. data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
  169. data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
  170. data/packaging/rpm/nginx_spec/passenger.conf +0 -9
  171. data/packaging/rpm/nginx_spec/poweredby.png +0 -0
  172. data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
  173. data/packaging/rpm/passenger_spec/config.json +0 -30
  174. data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
  175. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
  176. data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
  177. data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
  178. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
  179. data/packaging/rpm/repo_update +0 -114
  180. data/packaging/rpm/setup-system +0 -61
  181. data/packaging/rpm/shell +0 -10
  182. data/test/.rspec +0 -4
  183. data/test/config.json.example +0 -42
  184. data/test/config.json.rpm-automation +0 -15
  185. data/test/config.json.travis +0 -15
  186. data/test/config.json.vagrant +0 -30
  187. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
  188. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
  189. data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
  190. data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
  191. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
  192. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
  193. data/test/cxx/BufferedIOTest.cpp +0 -364
  194. data/test/cxx/CachedFileStatTest.cpp +0 -402
  195. data/test/cxx/CxxTestMain.cpp +0 -181
  196. data/test/cxx/DataStructures/LStringTest.cpp +0 -275
  197. data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
  198. data/test/cxx/DateParsingTest.cpp +0 -75
  199. data/test/cxx/DechunkerTest.cpp +0 -250
  200. data/test/cxx/EventedBufferedInputTest.cpp +0 -758
  201. data/test/cxx/EventedClientTest.cpp +0 -523
  202. data/test/cxx/FileChangeCheckerTest.cpp +0 -331
  203. data/test/cxx/FileDescriptorTest.cpp +0 -69
  204. data/test/cxx/FilterSupportTest.cpp +0 -433
  205. data/test/cxx/IOUtilsTest.cpp +0 -861
  206. data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
  207. data/test/cxx/MessageIOTest.cpp +0 -360
  208. data/test/cxx/MessagePassingTest.cpp +0 -81
  209. data/test/cxx/MessageReadersWritersTest.cpp +0 -576
  210. data/test/cxx/MessageServerTest.cpp +0 -393
  211. data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
  212. data/test/cxx/RequestHandlerTest.cpp +0 -1463
  213. data/test/cxx/ResponseCacheTest.cpp +0 -322
  214. data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
  215. data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
  216. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
  217. data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
  218. data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
  219. data/test/cxx/ServerKit/ServerTest.cpp +0 -408
  220. data/test/cxx/StaticStringTest.cpp +0 -220
  221. data/test/cxx/StringMapTest.cpp +0 -131
  222. data/test/cxx/SystemTimeTest.cpp +0 -37
  223. data/test/cxx/TemplateTest.cpp +0 -118
  224. data/test/cxx/TestSupport.cpp +0 -207
  225. data/test/cxx/TestSupport.h +0 -333
  226. data/test/cxx/UnionStationTest.cpp +0 -741
  227. data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
  228. data/test/cxx/UtilsTest.cpp +0 -672
  229. data/test/cxx/VariantMapTest.cpp +0 -191
  230. data/test/gdbinit.example +0 -34
  231. data/test/integration_tests/apache2_tests.rb +0 -585
  232. data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
  233. data/test/integration_tests/native_packaging_spec.rb +0 -368
  234. data/test/integration_tests/nginx_tests.rb +0 -402
  235. data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
  236. data/test/integration_tests/source_packaging_test.rb +0 -201
  237. data/test/integration_tests/spec_helper.rb +0 -22
  238. data/test/integration_tests/standalone_tests.rb +0 -392
  239. data/test/node/line_reader_spec.js +0 -338
  240. data/test/node/spec_helper.js +0 -65
  241. data/test/oxt/backtrace_test.cpp +0 -88
  242. data/test/oxt/counter.hpp +0 -55
  243. data/test/oxt/dynamic_thread_group_test.cpp +0 -131
  244. data/test/oxt/oxt_test_main.cpp +0 -27
  245. data/test/oxt/spin_lock_test.cpp +0 -59
  246. data/test/oxt/syscall_interruption_test.cpp +0 -39
  247. data/test/ruby/debug_logging_spec.rb +0 -145
  248. data/test/ruby/message_channel_spec.rb +0 -196
  249. data/test/ruby/rack/loader_spec.rb +0 -42
  250. data/test/ruby/rack/preloader_spec.rb +0 -48
  251. data/test/ruby/rails3.0/loader_spec.rb +0 -26
  252. data/test/ruby/rails3.0/preloader_spec.rb +0 -32
  253. data/test/ruby/rails3.1/loader_spec.rb +0 -26
  254. data/test/ruby/rails3.1/preloader_spec.rb +0 -32
  255. data/test/ruby/rails3.2/loader_spec.rb +0 -26
  256. data/test/ruby/rails3.2/preloader_spec.rb +0 -32
  257. data/test/ruby/rails4.0/loader_spec.rb +0 -28
  258. data/test/ruby/rails4.0/preloader_spec.rb +0 -34
  259. data/test/ruby/rails4.1/loader_spec.rb +0 -28
  260. data/test/ruby/rails4.1/preloader_spec.rb +0 -34
  261. data/test/ruby/request_handler_spec.rb +0 -747
  262. data/test/ruby/shared/loader_sharedspec.rb +0 -247
  263. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
  264. data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
  265. data/test/ruby/spec_helper.rb +0 -114
  266. data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
  267. data/test/ruby/union_station_spec.rb +0 -288
  268. data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
  269. data/test/ruby/utils/hosts_file_parser.rb +0 -258
  270. data/test/ruby/utils/tee_input_spec.rb +0 -235
  271. data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
  272. data/test/ruby/utils_spec.rb +0 -41
  273. data/test/stub/apache2/httpd.conf.erb +0 -122
  274. data/test/stub/apache2/mime.types +0 -748
  275. data/test/stub/garbage1.dat +0 -0
  276. data/test/stub/garbage2.dat +0 -0
  277. data/test/stub/garbage3.dat +0 -0
  278. data/test/stub/http_request.yml +0 -23
  279. data/test/stub/index.html +0 -1
  280. data/test/stub/nginx/koi-utf +0 -109
  281. data/test/stub/nginx/koi-win +0 -103
  282. data/test/stub/nginx/mime.types +0 -70
  283. data/test/stub/nginx/nginx.conf.erb +0 -70
  284. data/test/stub/nginx/win-utf +0 -126
  285. data/test/stub/node/app.js +0 -133
  286. data/test/stub/node/public/.gitignore +0 -0
  287. data/test/stub/node/tmp/.gitignore +0 -0
  288. data/test/stub/rack/config.ru +0 -95
  289. data/test/stub/rack/library.rb +0 -16
  290. data/test/stub/rack/public/.gitignore +0 -0
  291. data/test/stub/rack/start.rb +0 -52
  292. data/test/stub/rack/tmp/.gitignore +0 -0
  293. data/test/stub/rails3.0/.gitignore +0 -4
  294. data/test/stub/rails3.0/Gemfile +0 -22
  295. data/test/stub/rails3.0/Gemfile.lock +0 -80
  296. data/test/stub/rails3.0/Rakefile +0 -10
  297. data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
  298. data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
  299. data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
  300. data/test/stub/rails3.0/config.ru +0 -4
  301. data/test/stub/rails3.0/config/application.rb +0 -48
  302. data/test/stub/rails3.0/config/boot.rb +0 -13
  303. data/test/stub/rails3.0/config/database.yml +0 -22
  304. data/test/stub/rails3.0/config/environment.rb +0 -5
  305. data/test/stub/rails3.0/config/environments/development.rb +0 -19
  306. data/test/stub/rails3.0/config/environments/production.rb +0 -48
  307. data/test/stub/rails3.0/config/environments/test.rb +0 -32
  308. data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
  309. data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
  310. data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
  311. data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
  312. data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
  313. data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
  314. data/test/stub/rails3.0/config/locales/en.yml +0 -5
  315. data/test/stub/rails3.0/config/routes.rb +0 -58
  316. data/test/stub/rails3.0/db/seeds.rb +0 -7
  317. data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
  318. data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
  319. data/test/stub/rails3.0/log/.gitignore +0 -0
  320. data/test/stub/rails3.0/public/404.html +0 -26
  321. data/test/stub/rails3.0/public/422.html +0 -26
  322. data/test/stub/rails3.0/public/500.html +0 -26
  323. data/test/stub/rails3.0/public/favicon.ico +0 -0
  324. data/test/stub/rails3.0/public/index.html +0 -279
  325. data/test/stub/rails3.0/public/robots.txt +0 -5
  326. data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
  327. data/test/stub/rails3.0/script/rails +0 -9
  328. data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
  329. data/test/stub/rails3.0/test/test_helper.rb +0 -13
  330. data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
  331. data/test/stub/rails3.1/.gitignore +0 -15
  332. data/test/stub/rails3.1/Gemfile +0 -37
  333. data/test/stub/rails3.1/Gemfile.lock +0 -115
  334. data/test/stub/rails3.1/README +0 -261
  335. data/test/stub/rails3.1/Rakefile +0 -7
  336. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  337. data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
  338. data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
  339. data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
  340. data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
  341. data/test/stub/rails3.1/app/models/.gitkeep +0 -0
  342. data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
  343. data/test/stub/rails3.1/config.ru +0 -4
  344. data/test/stub/rails3.1/config/application.rb +0 -48
  345. data/test/stub/rails3.1/config/boot.rb +0 -6
  346. data/test/stub/rails3.1/config/database.yml +0 -25
  347. data/test/stub/rails3.1/config/environment.rb +0 -5
  348. data/test/stub/rails3.1/config/environments/development.rb +0 -30
  349. data/test/stub/rails3.1/config/environments/production.rb +0 -60
  350. data/test/stub/rails3.1/config/environments/test.rb +0 -39
  351. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
  352. data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
  353. data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
  354. data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
  355. data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
  356. data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
  357. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
  358. data/test/stub/rails3.1/config/locales/en.yml +0 -5
  359. data/test/stub/rails3.1/config/routes.rb +0 -58
  360. data/test/stub/rails3.1/db/seeds.rb +0 -7
  361. data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
  362. data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
  363. data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
  364. data/test/stub/rails3.1/log/.gitkeep +0 -0
  365. data/test/stub/rails3.1/public/404.html +0 -26
  366. data/test/stub/rails3.1/public/422.html +0 -26
  367. data/test/stub/rails3.1/public/500.html +0 -26
  368. data/test/stub/rails3.1/public/favicon.ico +0 -0
  369. data/test/stub/rails3.1/public/index.html +0 -241
  370. data/test/stub/rails3.1/public/robots.txt +0 -5
  371. data/test/stub/rails3.1/script/rails +0 -6
  372. data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
  373. data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
  374. data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
  375. data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
  376. data/test/stub/rails3.1/test/test_helper.rb +0 -13
  377. data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
  378. data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
  379. data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
  380. data/test/stub/rails3.2/.gitignore +0 -15
  381. data/test/stub/rails3.2/Gemfile +0 -39
  382. data/test/stub/rails3.2/Gemfile.lock +0 -113
  383. data/test/stub/rails3.2/Rakefile +0 -7
  384. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  385. data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
  386. data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
  387. data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
  388. data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
  389. data/test/stub/rails3.2/app/models/.gitkeep +0 -0
  390. data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
  391. data/test/stub/rails3.2/config.ru +0 -4
  392. data/test/stub/rails3.2/config/application.rb +0 -62
  393. data/test/stub/rails3.2/config/boot.rb +0 -6
  394. data/test/stub/rails3.2/config/database.yml +0 -25
  395. data/test/stub/rails3.2/config/environment.rb +0 -5
  396. data/test/stub/rails3.2/config/environments/development.rb +0 -37
  397. data/test/stub/rails3.2/config/environments/production.rb +0 -67
  398. data/test/stub/rails3.2/config/environments/test.rb +0 -37
  399. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
  400. data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
  401. data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
  402. data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
  403. data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
  404. data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
  405. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
  406. data/test/stub/rails3.2/config/locales/en.yml +0 -5
  407. data/test/stub/rails3.2/config/routes.rb +0 -58
  408. data/test/stub/rails3.2/db/seeds.rb +0 -7
  409. data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
  410. data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
  411. data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
  412. data/test/stub/rails3.2/log/.gitkeep +0 -0
  413. data/test/stub/rails3.2/public/404.html +0 -26
  414. data/test/stub/rails3.2/public/422.html +0 -26
  415. data/test/stub/rails3.2/public/500.html +0 -25
  416. data/test/stub/rails3.2/public/favicon.ico +0 -0
  417. data/test/stub/rails3.2/public/index.html +0 -241
  418. data/test/stub/rails3.2/public/robots.txt +0 -5
  419. data/test/stub/rails3.2/script/rails +0 -6
  420. data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
  421. data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
  422. data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
  423. data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
  424. data/test/stub/rails3.2/test/test_helper.rb +0 -13
  425. data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
  426. data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
  427. data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
  428. data/test/stub/rails4.0/.gitignore +0 -16
  429. data/test/stub/rails4.0/Gemfile +0 -45
  430. data/test/stub/rails4.0/Gemfile.lock +0 -126
  431. data/test/stub/rails4.0/README.rdoc +0 -28
  432. data/test/stub/rails4.0/Rakefile +0 -6
  433. data/test/stub/rails4.0/app/assets/images/.keep +0 -0
  434. data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
  435. data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
  436. data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
  437. data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
  438. data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
  439. data/test/stub/rails4.0/app/mailers/.keep +0 -0
  440. data/test/stub/rails4.0/app/models/.keep +0 -0
  441. data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
  442. data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
  443. data/test/stub/rails4.0/bin/bundle +0 -3
  444. data/test/stub/rails4.0/bin/rails +0 -4
  445. data/test/stub/rails4.0/bin/rake +0 -4
  446. data/test/stub/rails4.0/config.ru +0 -4
  447. data/test/stub/rails4.0/config/application.rb +0 -23
  448. data/test/stub/rails4.0/config/boot.rb +0 -4
  449. data/test/stub/rails4.0/config/database.yml +0 -25
  450. data/test/stub/rails4.0/config/environment.rb +0 -5
  451. data/test/stub/rails4.0/config/environments/development.rb +0 -29
  452. data/test/stub/rails4.0/config/environments/production.rb +0 -80
  453. data/test/stub/rails4.0/config/environments/test.rb +0 -36
  454. data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
  455. data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
  456. data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
  457. data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
  458. data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
  459. data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
  460. data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
  461. data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
  462. data/test/stub/rails4.0/config/locales/en.yml +0 -23
  463. data/test/stub/rails4.0/config/routes.rb +0 -57
  464. data/test/stub/rails4.0/db/seeds.rb +0 -7
  465. data/test/stub/rails4.0/lib/assets/.keep +0 -0
  466. data/test/stub/rails4.0/lib/tasks/.keep +0 -0
  467. data/test/stub/rails4.0/log/.keep +0 -0
  468. data/test/stub/rails4.0/public/404.html +0 -58
  469. data/test/stub/rails4.0/public/422.html +0 -58
  470. data/test/stub/rails4.0/public/500.html +0 -57
  471. data/test/stub/rails4.0/public/favicon.ico +0 -0
  472. data/test/stub/rails4.0/public/robots.txt +0 -5
  473. data/test/stub/rails4.0/test/controllers/.keep +0 -0
  474. data/test/stub/rails4.0/test/fixtures/.keep +0 -0
  475. data/test/stub/rails4.0/test/helpers/.keep +0 -0
  476. data/test/stub/rails4.0/test/integration/.keep +0 -0
  477. data/test/stub/rails4.0/test/mailers/.keep +0 -0
  478. data/test/stub/rails4.0/test/models/.keep +0 -0
  479. data/test/stub/rails4.0/test/test_helper.rb +0 -15
  480. data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
  481. data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
  482. data/test/stub/rails4.1/.gitignore +0 -16
  483. data/test/stub/rails4.1/Gemfile +0 -45
  484. data/test/stub/rails4.1/Gemfile.lock +0 -129
  485. data/test/stub/rails4.1/README.rdoc +0 -28
  486. data/test/stub/rails4.1/Rakefile +0 -6
  487. data/test/stub/rails4.1/app/assets/images/.keep +0 -0
  488. data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
  489. data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
  490. data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
  491. data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
  492. data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
  493. data/test/stub/rails4.1/app/mailers/.keep +0 -0
  494. data/test/stub/rails4.1/app/models/.keep +0 -0
  495. data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
  496. data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
  497. data/test/stub/rails4.1/bin/bundle +0 -3
  498. data/test/stub/rails4.1/bin/rails +0 -4
  499. data/test/stub/rails4.1/bin/rake +0 -4
  500. data/test/stub/rails4.1/config.ru +0 -4
  501. data/test/stub/rails4.1/config/application.rb +0 -23
  502. data/test/stub/rails4.1/config/boot.rb +0 -4
  503. data/test/stub/rails4.1/config/database.yml +0 -25
  504. data/test/stub/rails4.1/config/environment.rb +0 -5
  505. data/test/stub/rails4.1/config/environments/development.rb +0 -29
  506. data/test/stub/rails4.1/config/environments/production.rb +0 -80
  507. data/test/stub/rails4.1/config/environments/test.rb +0 -36
  508. data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
  509. data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
  510. data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
  511. data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
  512. data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
  513. data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
  514. data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
  515. data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
  516. data/test/stub/rails4.1/config/locales/en.yml +0 -23
  517. data/test/stub/rails4.1/config/routes.rb +0 -57
  518. data/test/stub/rails4.1/db/seeds.rb +0 -7
  519. data/test/stub/rails4.1/lib/assets/.keep +0 -0
  520. data/test/stub/rails4.1/lib/tasks/.keep +0 -0
  521. data/test/stub/rails4.1/log/.keep +0 -0
  522. data/test/stub/rails4.1/public/404.html +0 -58
  523. data/test/stub/rails4.1/public/422.html +0 -58
  524. data/test/stub/rails4.1/public/500.html +0 -57
  525. data/test/stub/rails4.1/public/favicon.ico +0 -0
  526. data/test/stub/rails4.1/public/robots.txt +0 -5
  527. data/test/stub/rails4.1/test/controllers/.keep +0 -0
  528. data/test/stub/rails4.1/test/fixtures/.keep +0 -0
  529. data/test/stub/rails4.1/test/helpers/.keep +0 -0
  530. data/test/stub/rails4.1/test/integration/.keep +0 -0
  531. data/test/stub/rails4.1/test/mailers/.keep +0 -0
  532. data/test/stub/rails4.1/test/models/.keep +0 -0
  533. data/test/stub/rails4.1/test/test_helper.rb +0 -15
  534. data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
  535. data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
  536. data/test/stub/start_error.pl +0 -24
  537. data/test/stub/upload_data.txt +0 -494
  538. data/test/stub/wsgi/passenger_wsgi.py +0 -212
  539. data/test/stub/wsgi/public/.gitignore +0 -0
  540. data/test/stub/wsgi/tmp/.gitignore +0 -0
  541. data/test/support/allocate_memory.c +0 -14
  542. data/test/support/apache2_controller.rb +0 -258
  543. data/test/support/multipart.rb +0 -62
  544. data/test/support/nginx_controller.rb +0 -97
  545. data/test/support/placebo-preloader.rb +0 -88
  546. data/test/support/test_helper.rb +0 -455
  547. data/test/support/valgrind.h +0 -2539
  548. data/test/tut/tut.h +0 -1310
  549. data/test/tut/tut_reporter.h +0 -256
  550. data/test/valgrind-osx.supp +0 -7
@@ -1,62 +0,0 @@
1
- module Multipart
2
- # From: http://deftcode.com/code/flickr_upload/multipartpost.rb
3
- ## Helper class to prepare an HTTP POST request with a file upload
4
- ## Mostly taken from
5
- #http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/113774
6
- ### WAS:
7
- ## Anything that's broken and wrong probably the fault of Bill Stilwell
8
- ##(bill@marginalia.org)
9
- ### NOW:
10
- ## Everything wrong is due to keith@oreilly.com
11
- require 'rubygems'
12
- require 'mime/types'
13
- require 'net/http'
14
- require 'cgi'
15
-
16
- class Param
17
- attr_accessor :k, :v
18
- def initialize( k, v )
19
- @k = k
20
- @v = v
21
- end
22
-
23
- def to_multipart
24
- #return "Content-Disposition: form-data; name=\"#{CGI::escape(k)}\"\r\n\r\n#{v}\r\n"
25
- # Don't escape mine...
26
- return "Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n#{v}\r\n"
27
- end
28
- end
29
-
30
- class FileParam
31
- attr_accessor :k, :filename, :content
32
- def initialize( k, filename, content )
33
- @k = k
34
- @filename = filename
35
- @content = content
36
- end
37
-
38
- def to_multipart
39
- #return "Content-Disposition: form-data; name=\"#{CGI::escape(k)}\"; filename=\"#{filename}\"\r\n" + "Content-Transfer-Encoding: binary\r\n" + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n "
40
- # Don't escape mine
41
- return "Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{filename}\"\r\n" + "Content-Transfer-Encoding: binary\r\n" + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n"
42
- end
43
- end
44
- class MultipartPost
45
- BOUNDARY = 'tarsiers-rule0000'
46
- HEADER = {"Content-type" => "multipart/form-data, boundary=" + BOUNDARY + " "}
47
-
48
- def prepare_query (params)
49
- fp = []
50
- params.each {|k,v|
51
- if v.respond_to?(:read)
52
- fp.push(FileParam.new(k, v.path, v.read))
53
- else
54
- fp.push(Param.new(k,v))
55
- end
56
- }
57
- query = fp.collect {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--"
58
- return query, HEADER
59
- end
60
- end
61
- end
62
-
@@ -1,97 +0,0 @@
1
- require 'erb'
2
- PhusionPassenger.require_passenger_lib 'vendor/daemon_controller'
3
- PhusionPassenger.require_passenger_lib 'platform_info/ruby'
4
-
5
- class NginxController
6
- PlatformInfo = PhusionPassenger::PlatformInfo
7
- TEMPLATE_DIR = File.expand_path(File.dirname(__FILE__) + "/../stub/nginx")
8
- PORT = 64507
9
-
10
- def initialize(root_dir)
11
- root_dir = File.expand_path(root_dir)
12
- @passenger_root = PhusionPassenger.install_spec
13
- @nginx_root = root_dir
14
- @port = PORT
15
- @config_file = "#{root_dir}/nginx.conf"
16
- @pid_file = "#{root_dir}/nginx.pid"
17
- @log_file = "#{root_dir}/error.log"
18
- @controller = PhusionPassenger::DaemonController.new(
19
- :identifier => 'Nginx',
20
- :start_command => "#{CONFIG['nginx']} -c '#{@config_file}'",
21
- :ping_command => [:tcp, '127.0.0.1', PORT],
22
- :pid_file => @pid_file,
23
- :log_file => @log_file,
24
- :timeout => 25,
25
- :before_start => method(:write_nginx_config_files)
26
- )
27
-
28
- @servers = []
29
- @max_pool_size = 1
30
- end
31
-
32
- def set(options)
33
- options.each_pair do |key, value|
34
- instance_variable_set("@#{key}", value)
35
- end
36
- end
37
-
38
- def start
39
- stop
40
- @controller.start
41
- end
42
-
43
- def stop
44
- @controller.stop
45
- # On OS X, the Nginx server socket may linger around for a while
46
- # after Nginx shutdown, despite Nginx setting SO_REUSEADDR.
47
- sockaddr = Socket.pack_sockaddr_in(PORT, '127.0.0.1')
48
- eventually(30) do
49
- !@controller.send(:ping_socket, Socket::Constants::AF_INET, sockaddr)
50
- end
51
- end
52
-
53
- def running?
54
- return @controller.running?
55
- end
56
-
57
- def port
58
- return @port
59
- end
60
-
61
- def add_server
62
- server = Server.new
63
- yield server
64
- @servers << server
65
- end
66
-
67
- private
68
- class Server
69
- attr_accessor :values
70
- attr_accessor :extra
71
-
72
- def initialize
73
- @values = { :passenger_enabled => "on" }
74
- end
75
-
76
- def [](key)
77
- return @values[key]
78
- end
79
-
80
- def []=(key, value)
81
- @values[key] = value
82
- end
83
-
84
- def <<(text)
85
- @extra = text
86
- end
87
- end
88
-
89
- def write_nginx_config_files
90
- template = ERB.new(File.read("#{TEMPLATE_DIR}/nginx.conf.erb"))
91
- File.write(@config_file, template.result(get_binding))
92
- end
93
-
94
- def get_binding
95
- return binding
96
- end
97
- end
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # An application preloader which doesn't actually preload anything
3
- # and executes the requested start command.
4
-
5
- DIR = File.expand_path(File.dirname(__FILE__))
6
- require File.expand_path("#{DIR}/../../lib/phusion_passenger")
7
- PhusionPassenger.locate_directories
8
- PhusionPassenger.require_passenger_lib 'native_support'
9
- require 'socket'
10
-
11
- STDOUT.sync = true
12
- STDERR.sync = true
13
- puts "!> I have control 1.0"
14
- abort "Invalid initialization header" if STDIN.readline != "You have control 1.0\n"
15
-
16
- options = {}
17
- while (line = STDIN.readline) != "\n"
18
- name, value = line.strip.split(/: */, 2)
19
- options[name] = value
20
- end
21
-
22
- socket_filename = "/tmp/placebo-preloader.sock.#{Process.pid}"
23
- server = UNIXServer.new(socket_filename)
24
- puts "!> Ready"
25
- puts "!> socket: unix:#{socket_filename}"
26
- puts "!> "
27
-
28
- def process_client_command(server, client, command)
29
- if command == "spawn\n"
30
- options = {}
31
- while (line = client.readline) != "\n"
32
- name, value = line.strip.split(/: */, 2)
33
- options[name] = value
34
- end
35
-
36
- command = options["start_command"].split("\t")
37
- process_title = options["process_title"]
38
- process_title = command[0] if !process_title || process_title.empty?
39
- command[0] = [command[0], process_title]
40
-
41
- pid = fork do
42
- begin
43
- STDIN.reopen(client)
44
- STDOUT.reopen(client)
45
- STDOUT.sync = true
46
- server.close
47
- client.close
48
- puts "OK"
49
- puts Process.pid
50
- exec(*command)
51
- rescue Exception => e
52
- STDERR.puts "*** ERROR: #{e}\n#{e.backtrace.join("\n")}"
53
- ensure
54
- STDERR.flush
55
- exit!(1)
56
- end
57
- end
58
- Process.detach(pid)
59
- elsif command == "pid\n"
60
- client.write("#{Process.pid}\n")
61
- else
62
- client.write("unknown request\n")
63
- end
64
- end
65
-
66
- begin
67
- exit if ARGV[0] == "exit-immediately"
68
- while true
69
- ios = select([server, STDIN])[0]
70
- if ios.include?(server)
71
- client = server.accept
72
- begin
73
- process_client_command(server, client, client.readline)
74
- ensure
75
- client.close
76
- end
77
- end
78
- if ios.include?(STDIN)
79
- begin
80
- STDIN.readline
81
- rescue EOFError
82
- exit
83
- end
84
- end
85
- end
86
- ensure
87
- File.unlink(socket_filename) rescue nil
88
- end
@@ -1,455 +0,0 @@
1
- # Clean Bundler environment variables. Otherwise we can't test against multiple Rails versions.
2
- if defined?(Bundler)
3
- clean_env = nil
4
- Bundler.with_clean_env do
5
- clean_env = ENV.to_hash
6
- end
7
- ENV.replace(clean_env)
8
- end
9
-
10
- require 'fileutils'
11
- require 'resolv'
12
- require 'net/http'
13
- require 'uri'
14
- require 'support/multipart'
15
- PhusionPassenger.require_passenger_lib 'constants'
16
- PhusionPassenger.require_passenger_lib 'debug_logging'
17
- PhusionPassenger.require_passenger_lib 'platform_info/ruby'
18
-
19
- # Module containing helper methods, to be included in unit tests.
20
- module TestHelper
21
- ######## Stub helpers ########
22
-
23
- class Stub
24
- attr_reader :app_root
25
- attr_reader :full_app_root
26
-
27
- def self.use(name, app_root = nil)
28
- stub = new(name, app_root)
29
- begin
30
- yield stub
31
- ensure
32
- stub.destroy
33
- end
34
- end
35
-
36
- def initialize(name, app_root = nil)
37
- @name = name
38
- if !File.exist?(stub_source_dir)
39
- raise Errno::ENOENT, "Stub '#{name}' not found."
40
- end
41
-
42
- if app_root
43
- @app_root = app_root
44
- else
45
- identifier = name.gsub('/', '-')
46
- @app_root = "tmp.#{identifier}.#{object_id}"
47
- end
48
- @full_app_root = File.expand_path(@app_root)
49
- remove_dir_tree(@full_app_root)
50
- FileUtils.mkdir_p(@full_app_root)
51
- copy_stub_contents
52
- system("chmod", "-R", "a+rw", @full_app_root)
53
- end
54
-
55
- def reset
56
- # Empty directory without removing the directory itself,
57
- # allowing processes with this directory as current working
58
- # directory to continue to function properly.
59
- files = Dir["#{@full_app_root}/*"]
60
- files |= Dir["#{@full_app_root}/.*"]
61
- files.delete("#{@full_app_root}/.")
62
- files.delete("#{@full_app_root}/..")
63
- FileUtils.chmod_R(0777, files)
64
- FileUtils.rm_rf(files)
65
-
66
- copy_stub_contents
67
- system("chmod", "-R", "a+rw", @full_app_root)
68
- end
69
-
70
- def move(new_app_root)
71
- File.rename(@full_app_root, new_app_root)
72
- @app_root = new_app_root
73
- @full_app_root = File.expand_path(new_app_root)
74
- end
75
-
76
- def destroy
77
- remove_dir_tree(@full_app_root)
78
- end
79
-
80
- def full_app_root
81
- return File.expand_path(@app_root)
82
- end
83
-
84
- def public_file(name)
85
- return File.binread("#{@full_app_root}/public/#{name}")
86
- end
87
-
88
- private
89
- def stub_source_dir
90
- return "stub/#{@name}"
91
- end
92
-
93
- def copy_stub_contents
94
- FileUtils.cp_r("#{stub_source_dir}/.", @full_app_root)
95
- end
96
- end
97
-
98
- class RackStub < Stub
99
- def startup_file
100
- return "#{@full_app_root}/config.ru"
101
- end
102
-
103
- private
104
- def copy_stub_contents
105
- super
106
- if PhusionPassenger.build_system_dir
107
- build_system_dir = PhusionPassenger.build_system_dir
108
- if !File.exist?("#{@full_app_root}/Gemfile")
109
- FileUtils.cp("#{build_system_dir}/Gemfile", @full_app_root)
110
- FileUtils.cp("#{build_system_dir}/Gemfile.lock", @full_app_root)
111
- if File.exist?("#{build_system_dir}/.bundle")
112
- FileUtils.cp_r("#{build_system_dir}/.bundle", @full_app_root)
113
- end
114
- end
115
- end
116
- end
117
- end
118
-
119
- class PythonStub < Stub
120
- def startup_file
121
- return "#{@full_app_root}/passenger_wsgi.py"
122
- end
123
- end
124
-
125
- class NodejsStub < Stub
126
- def startup_file
127
- return "#{@full_app_root}/app.js"
128
- end
129
- end
130
-
131
- def describe_rails_versions(matcher, &block)
132
- if ENV['ONLY_RAILS_VERSION'] && !ENV['ONLY_RAILS_VERSION'].empty?
133
- found_versions = [ENV['ONLY_RAILS_VERSION']]
134
- else
135
- found_versions = Dir.entries("stub/rails_apps").grep(/^\d+\.\d+$/)
136
- if RUBY_VERSION >= '1.9.0'
137
- # Only Rails >= 2.3 is compatible with Ruby 1.9.
138
- found_versions.reject! do |version|
139
- version < '2.3'
140
- end
141
- elsif RUBY_VERSION <= '1.8.6'
142
- # Rails >= 3 dropped support for 1.8.6 and older.
143
- found_versions.reject! do |version|
144
- version >= '3.0'
145
- end
146
- end
147
- end
148
-
149
- case matcher
150
- when /^<= (.+)$/
151
- max_version = $1
152
- found_versions.reject! do |version|
153
- version > max_version
154
- end
155
- when /^>= (.+)$/
156
- min_version = $1
157
- found_versions.reject! do |version|
158
- version < min_version
159
- end
160
- when /^= (.+)$/
161
- exact_version = $1
162
- found_versions.reject! do |version|
163
- version != exact_version
164
- end
165
- else
166
- raise ArgumentError, "Unknown matcher string '#{matcher}'"
167
- end
168
-
169
- found_versions.sort.each do |version|
170
- klass = describe("Rails #{version}", &block)
171
- klass.send(:define_method, :rails_version) do
172
- version
173
- end
174
- end
175
- end
176
-
177
-
178
- ######## HTTP helpers ########
179
- # Before using these methods, one must set the '@server' instance variable
180
- # and implement the start_web_server_if_necessary method.
181
-
182
- def get(uri)
183
- if @server.nil?
184
- raise "You must set the '@server' instance variable before get() can be used. For example, @server = 'http://mydomain.test/'"
185
- end
186
- start_web_server_if_necessary
187
- return Net::HTTP.get(URI.parse("#{@server}#{uri}"))
188
- end
189
-
190
- def get_response(uri)
191
- if @server.nil?
192
- raise "You must set the '@server' instance variable before get() can be used. For example, @server = 'http://mydomain.test/'"
193
- end
194
- start_web_server_if_necessary
195
- return Net::HTTP.get_response(URI.parse("#{@server}#{uri}"))
196
- end
197
-
198
- def post(uri, params = {})
199
- if @server.nil?
200
- raise "You must set the '@server' instance variable before get() can be used. For example, @server = 'http://mydomain.test/'"
201
- end
202
- start_web_server_if_necessary
203
- url = URI.parse("#{@server}#{uri}")
204
- if params.values.any? { |x| x.respond_to?(:read) }
205
- mp = Multipart::MultipartPost.new
206
- query, headers = mp.prepare_query(params)
207
- Net::HTTP.start(url.host, url.port) do |http|
208
- return http.post(url.path, query, headers).body
209
- end
210
- else
211
- return Net::HTTP.post_form(url, params).body
212
- end
213
- end
214
-
215
- def check_hosts_configuration
216
- begin
217
- ok = Resolv.getaddress("passenger.test") == "127.0.0.1"
218
- ok = ok && Resolv.getaddress("1.passenger.test") == "127.0.0.1"
219
- rescue Resolv::ResolvError, ArgumentError
220
- # There's a bug in Ruby 1.8.6-p287's resolv.rb library, which causes
221
- # an ArgumentError to be raised instead of ResolvError when resolving
222
- # failed.
223
- ok = false
224
- end
225
- if !ok
226
- message = "To run the integration test, you must update " <<
227
- "your hosts file.\n" <<
228
- "Please add these to your /etc/hosts:\n\n" <<
229
- "127.0.0.1 passenger.test\n" <<
230
- "127.0.0.1 1.passenger.test 2.passenger.test 3.passenger.test\n" <<
231
- "127.0.0.1 4.passenger.test 5.passenger.test 6.passenger.test\n" <<
232
- "127.0.0.1 7.passenger.test 8.passenger.test 9.passenger.test\n"
233
- if RUBY_PLATFORM =~ /darwin/
234
- message << "\n\nThen run:\n\n" <<
235
- " dscacheutil -flushcache"
236
- end
237
- STDERR.puts "---------------------------"
238
- STDERR.puts message
239
- exit!
240
- end
241
- end
242
-
243
-
244
- ######## Other helpers ########
245
-
246
- def when_user_switching_possible
247
- if Process.euid == 0
248
- yield
249
- end
250
- end
251
-
252
- alias when_running_as_root when_user_switching_possible
253
-
254
- def when_not_running_as_root
255
- if Process.euid != 0
256
- yield
257
- end
258
- end
259
-
260
- def eventually(deadline_duration = 2, check_interval = 0.05)
261
- deadline = Time.now + deadline_duration
262
- while Time.now < deadline
263
- if yield
264
- return
265
- else
266
- sleep(check_interval)
267
- end
268
- end
269
- raise "Time limit exceeded"
270
- end
271
-
272
- def should_never_happen(deadline_duration = 1, check_interval = 0.05)
273
- deadline = Time.now + deadline_duration
274
- while Time.now < deadline
275
- if yield
276
- raise "That which shouldn't happen happened anyway"
277
- else
278
- sleep(check_interval)
279
- end
280
- end
281
- end
282
-
283
- def remove_dir_tree(dir)
284
- # FileUtils.chmod_R is susceptible to race conditions:
285
- # if another thread/process deletes a file just before
286
- # chmod_R has chmodded it, then chmod_R will raise an error.
287
- # Keep trying until a real error has been reached or until
288
- # chmod_R is done.
289
- done = false
290
- while !done
291
- begin
292
- FileUtils.chmod_R(0777, dir)
293
- done = true
294
- rescue Errno::ENOENT
295
- done = !File.exist?(dir)
296
- end
297
- end
298
- FileUtils.rm_rf(dir)
299
- end
300
-
301
- def spawn_process(*args)
302
- args.map! do |arg|
303
- arg.to_s
304
- end
305
- if Process.respond_to?(:spawn)
306
- return Process.spawn(*args)
307
- else
308
- return fork do
309
- exec(*args)
310
- end
311
- end
312
- end
313
-
314
- # Run a script in a Ruby subprocess. *args are program arguments to
315
- # pass to the script. Returns the script's stdout output.
316
- def run_script(code, *args)
317
- stdin_child, stdin_parent = IO.pipe
318
- stdout_parent, stdout_child = IO.pipe
319
- program_args = [PhusionPassenger::PlatformInfo.ruby_command, "-e",
320
- "eval(STDIN.read, binding, '(script)', 0)",
321
- PhusionPassenger::LIBDIR, *args]
322
- if Process.respond_to?(:spawn)
323
- program_args << {
324
- STDIN => stdin_child,
325
- STDOUT => stdout_child,
326
- STDERR => STDERR,
327
- :close_others => true
328
- }
329
- pid = Process.spawn(*program_args)
330
- else
331
- pid = fork do
332
- stdin_parent.close
333
- stdout_parent.close
334
- STDIN.reopen(stdin_child)
335
- STDOUT.reopen(stdout_child)
336
- stdin_child.close
337
- stdout_child.close
338
- exec(*program_args)
339
- end
340
- end
341
- stdin_child.close
342
- stdout_child.close
343
- stdin_parent.write(
344
- %Q[require(ARGV.shift + "/phusion_passenger")
345
- #{code}])
346
- stdin_parent.close
347
- result = stdout_parent.read
348
- stdout_parent.close
349
- Process.waitpid(pid)
350
- return result
351
- rescue Exception
352
- Process.kill('SIGKILL', pid) if pid
353
- raise
354
- ensure
355
- [stdin_child, stdout_child, stdin_parent, stdout_parent].each do |io|
356
- io.close if io && !io.closed?
357
- end
358
- begin
359
- Process.waitpid(pid) if pid
360
- rescue Errno::ECHILD, Errno::ESRCH
361
- end
362
- end
363
-
364
- def spawn_logging_agent(tmpdir, dump_file, password)
365
- socket_filename = "#{tmpdir}/logging.socket"
366
- password_filename = "#{tmpdir}/password"
367
- File.write(password_filename, password)
368
- pid = spawn_process("#{PhusionPassenger.support_binaries_dir}/#{PhusionPassenger::AGENT_EXE}",
369
- "logger",
370
- "--passenger-root", PhusionPassenger.install_spec,
371
- "--log-level", PhusionPassenger::DebugLogging.log_level,
372
- "--dump-file", dump_file,
373
- "--user", CONFIG['normal_user_1'],
374
- "--group", CONFIG['normal_group_1'],
375
- "--listen", "unix:#{socket_filename}",
376
- "--password-file", password_filename)
377
- eventually do
378
- File.exist?(socket_filename)
379
- end
380
- return [pid, socket_filename, "unix:#{socket_filename}"]
381
- rescue Exception => e
382
- if pid
383
- Process.kill('KILL', pid)
384
- Process.waitpid(pid)
385
- end
386
- raise e
387
- end
388
-
389
- def flush_logging_agent(password, socket_address)
390
- PhusionPassenger.require_passenger_lib 'message_client' if !defined?(PhusionPassenger::MessageClient)
391
- client = PhusionPassenger::MessageClient.new("logging", password, socket_address)
392
- begin
393
- client.write("flush")
394
- client.read
395
- ensure
396
- client.close
397
- end
398
- end
399
-
400
- def inspect_server(name)
401
- instance = PhusionPassenger::AdminTools::ServerInstance.list.first
402
- if name
403
- instance.connect(:passenger_status) do
404
- return instance.send(name)
405
- end
406
- else
407
- return instance
408
- end
409
- end
410
-
411
- if "".respond_to?(:force_encoding)
412
- def binary_string(str)
413
- return str.force_encoding("binary")
414
- end
415
- else
416
- def binary_string(str)
417
- return str
418
- end
419
- end
420
- end
421
-
422
- File.class_eval do
423
- def self.prepend(filename, data)
424
- original_content = File.read(filename)
425
- File.open(filename, 'w') do |f|
426
- f.write(data)
427
- f.write(original_content)
428
- end
429
- end
430
-
431
- def self.append(filename, data)
432
- File.open(filename, 'a') do |f|
433
- f.write(data)
434
- end
435
- end
436
-
437
- def self.write(filename, content = nil)
438
- if block_given?
439
- content = yield File.read(filename)
440
- end
441
- File.open(filename, 'w') do |f|
442
- f.write(content)
443
- end
444
- end
445
-
446
- def self.touch(filename, timestamp = nil)
447
- File.open(filename, 'w').close
448
- File.utime(timestamp, timestamp, filename) if timestamp
449
- end
450
-
451
- def self.binread(filename)
452
- return File.read(filename)
453
- end if !respond_to?(:binread)
454
- end
455
-