summaryrefslogtreecommitdiffhomepage
path: root/src/ruby/nxt_ruby.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2021-10-28Moving request limit control to libunit.Max Romanov1-7/+1
Introducting application graceful stop. For now only used when application process reach request limit value. This closes #585 issue on GitHub.
2021-07-02Ruby: process and thread lifecycle hooks.Oisin Canty1-1/+142
This feature allows one to specify blocks of code that are called when certain lifecycle events occur. A user configures a "hooks" property on the app configuration that points to a script. This script will be evaluated on boot and should contain blocks of code that will be called on specific events. An example of configuration: { "type": "ruby", "processes": 2, "threads": 2, "user": "vagrant", "group": "vagrant", "script": "config.ru", "hooks": "hooks.rb", "working_directory": "/home/vagrant/unit/rbhooks", "environment": { "GEM_HOME": "/home/vagrant/.ruby" } } An example of a valid "hooks.rb" file follows: File.write("./hooks.#{Process.pid}", "hooks evaluated") on_worker_boot do File.write("./worker_boot.#{Process.pid}", "worker booted") end on_thread_boot do File.write("./thread_boot.#{Process.pid}.#{Thread.current.object_id}", "thread booted") end on_thread_shutdown do File.write("./thread_shutdown.#{Process.pid}.#{Thread.current.object_id}", "thread shutdown") end on_worker_shutdown do File.write("./worker_shutdown.#{Process.pid}", "worker shutdown") end This closes issue #535 on GitHub.
2021-07-01Ruby: improved logging of exceptions without backtraces.Oisin Canty1-4/+8
If an exception was raised with a backtrace of zero length, the nxt_ruby_exception_log() routine would return without logging the exception class and message. This commit fixes the issue.
2021-03-15Ruby: fixed encodings initialization.Valentin Bartenev1-0/+4
The Ruby interpreter expects an explicit setlocale() call before initialization to pick up character encodings in the "Encoding" class from the environment. This closes #531 issue on GitHub.
2020-12-07Ruby: fixed crash on thread start.Max Romanov1-1/+13
Ruby threads need to be created with GVL; otherwise, an attempt to access locked resources may occur, causing a crash. The issue was occasionally reproduced on Ubuntu 18.04 with Ruby 2.5.1 while running test_ruby_application_threads.
2020-11-05Ruby: error checking during thread creation.Max Romanov1-2/+6
Application terminates in case of thread creation failure.
2020-11-05Ruby: request processing in multiple threads.Max Romanov1-176/+471
This closes #482 issue on GitHub.
2020-11-05Ruby: reusing static constant references to string objects.Max Romanov1-43/+115
This shall save a couple of CPU cycles in request processing.
2020-07-31Isolation: fixed the generation of mounts table.Tiago Natel de Moura1-1/+2
Since the introduction of rootfs feature, some language modules can't be configured multiple times. Now the configure generates a separate nxt_<module>_mounts.h for each module compiled.
2020-06-23Isolation: fixed build when features aren't detected.Tiago Natel de Moura1-2/+0
2020-05-28Added "rootfs" feature.Tiago Natel de Moura1-0/+5
2020-03-09Refactor of process management.Tiago Natel de Moura1-8/+12
The process abstraction has changed to: setup(task, process) start(task, process_data) prefork(task, process, mp) The prefork() occurs in the main process right before fork. The file src/nxt_main_process.c is completely free of process specific logic. The creation of a process now supports a PROCESS_CREATED state. The The setup() function of each process can set its state to either created or ready. If created, a MSG_PROCESS_CREATED is sent to main process, where external setup can be done (required for rootfs under container). The core processes (discovery, controller and router) doesn't need external setup, then they all proceeds to their start() function straight away. In the case of applications, the load of the module happens at the process setup() time and The module's init() function has changed to be the start() of the process. The module API has changed to: setup(task, process, conf) start(task, data) As a direct benefit of the PROCESS_CREATED message, the clone(2) of processes using pid namespaces now doesn't need to create a pipe to make the child block until parent setup uid/gid mappings nor it needs to receive the child pid.
2020-01-28Ruby: changing callback functions prototype for v2.7.Max Romanov1-2/+4
This closes #371 issue on GitHub.
2019-12-24Adding "limits/shm" configuration validation and parsing.Max Romanov1-0/+1
2019-11-13Ruby: fixing initialization sequence.Max Romanov1-4/+7
There was a change (ruby/ruby@6c70fed) in Ruby 2.6 that moved RUBY_DESCRIPTION global constant definition out of Init_version(). Unit initialized Ruby incorrectly, so the constant was not defined. This closes #330 issue on GitHub.
2019-03-21Adjusting request schema value according to connection tls state.Max Romanov1-1/+3
This closes #223 issue on GitHub.
2019-02-28Made QUERY_STRING mandatory.Valentin Bartenev1-4/+2
According to CGI/1.1 RFC 3875: The server MUST set this variable; if the Script-URI does not include a query component, the QUERY_STRING MUST be defined as an empty string (""). Python's PEP 333(3) allows omitting it in WSGI interface; PHP docs force no requirements; PSGI and Rack specifications require it even if empty. When nginx proxies requests over FastCGI, it always provides QUERY_STRING. and some PHP apps have been observed to fail if it is missing (see issue #201 on GitHub). A drawback of this change (besides a small overhead) is that there will be no easy way to tell a missing query string from an empty one (i.e. requests with or without the "?" character); yet, it's negligible compared to the possible benefits of wider application compatibility. This closes #226 issue on GitHub.
2019-02-28Introducing Java Servlet Container beta.Max Romanov1-0/+1
2019-02-27Fixed processing of SERVER_NAME after 77aad2c142a0.Valentin Bartenev1-21/+7
Previously, the nxt_router_prepare_msg() function expected server host among other headers unmodified. It's not true anymore since normalization of the Host header has been introduced in 77aad2c142a0. The nxt_unit_split_host() function was removed. It didn't work correctly with IPv6 literals. Anyway, after 77aad2c142a0 the port splitting is done in router while Host header processing.
2018-08-06Unit application library.Max Romanov1-365/+328
Library now used in all language modules. Old 'nxt_app_*' code removed. See src/test/nxt_unit_app_test.c for usage sample.
2018-07-10Ruby: added "require('bundler/setup')".Alexander Borisov1-1/+23
This closes #93 PR on GitHub.
2018-06-25Introduced nxt_length() macro.Valentin Bartenev1-5/+5
2018-05-21Added SERVER_SOFTWARE request meta-variable.Valentin Bartenev1-0/+5
2018-04-04Changed version processing for modules.Alexander Borisov1-1/+1
2018-04-03Ruby: added 'enc/trans/transdb' module for converting encodings.Alexander Borisov1-0/+3
This closes #92 issue on GitHub.
2018-03-21Added Ruby support.Alexander Borisov1-0/+911