Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/logux/logux-rack
Rack-based Logux integration engine
https://github.com/logux/logux-rack
logux rack ruby
Last synced: about 2 months ago
JSON representation
Rack-based Logux integration engine
- Host: GitHub
- URL: https://github.com/logux/logux-rack
- Owner: logux
- License: mit
- Archived: true
- Created: 2019-10-01T05:01:16.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-07-12T18:05:11.000Z (over 1 year ago)
- Last Synced: 2024-10-27T05:43:26.663Z (3 months ago)
- Topics: logux, rack, ruby
- Language: Ruby
- Homepage: https://logux.org/
- Size: 389 KB
- Stars: 12
- Watchers: 4
- Forks: 16
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Logux::Rack
This gem provides Logux back-end protocol support for Rack-based applications, including Ruby on Rails. It enables [Logux Server integration](https://logux.io/guide/starting/proxy-server/) for full-duplex client-server communication.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'logux-rack'
```And then execute:
```bash
bundle install
```## Usage
Here is a minimal Rack configuration to start new `Logux::Rack` server:
```ruby
# config.ru
require 'logux/rack'run Logux.application
```Note that the HTTP response streaming depends on the web server used to serve the application. Use a server with streaming capability. [Puma](https://puma.io/), for instance:
```bash
gem install puma
```Start the server:
```bash
puma config.ru
```It is possible to mount `Logux::Rack` server within an existing Rails application. First of all, you will need to configure Logux by defining a server address in an initializer. For example, `config/initializers/logux.rb`:
```ruby
Logux.configuration do |config|
config.logux_host = 'http://localhost:31338'
end
```Mount `Logux::Rack` in routes:
```ruby
Rails.application.routes.draw do
mount Logux::Rack::App => '/'
end
```After this, POST requests to `/logux` will be processed by `LoguxController`. You can redefine it or inherit from, if it necessary, for example, for implementing custom authorization flow.
Here is another routing example for [Roda](https://github.com/jeremyevans/roda) application routing:
```ruby
class MyApp < Roda
route do |r|
r.is 'logux' { r.run Logux::Rack::App }
end
end
```[Hanami](https://hanamirb.org/) configuration example:
```ruby
# config/environment.rb
Hanami.configure do
mount Logux::Rack::App, at: '/'
end
````Logux::Rack` can also be embedded into another Rack application using [Rack::Builder](https://www.rubydoc.info/gems/rack/Rack/Builder):
```ruby
# config.ru
require 'logux/rack'app = Rack::Builder.new do
use Rack::CommonLogger
map '/logux' { run Logux::Rack::App }
# ...
endrun app
````Logux::Rack` will try to find Action for the specific message from Logux Server. For example, for `project/rename` action, you should define `Action::Project` class, inherited from `Logux::Action` base class, and implement `rename` method.
You can execute `rake logux:actions` to get the list of available action types, or `rake logux:channels` to get the list of available channels. Use optional path parameter to limit the search scope: `rake logux:actions[lib/logux/actions]`
## Development with Docker
Install gem dependencies:
```bash
docker-compose run app bundle install
```Run the specs:
```bash
docker-compose run app bundle exec rspec
```Perform [integration test](https://github.com/logux/backend-test):
```bash
cd test/app
bundle exec rails db:reset && bundle exec rails server# Execute from another terminal:
cd test
yarn && npx @logux/backend-test http://server:3000/logux
```Run Rubocop:
```bash
docker-compose run app bundle exec rubocop
```## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).