Então você quer ter um aplicativo Rails com alguns outros aplicativos dentro?
Posso ter um aplicativo Rails dentro de um aplicativo Rails?
Se você já se fez essa pergunta, encontrará uma resposta. Vamos começar!
O que é um Umbrella?
O aplicativo umbrella (guarda-chuva, em português) é um aplicativo que contém outros aplicativos completos e totalmente incluídos no seu interior. Por exemplo, você tem alguns poucos aplicativos pequenos para servir algumas APIs diferentes, algum conteúdo estático e painel de administração. Como um bom começo, você pode juntá-los sob um único aplicativo guarda-chuva. É mais fácil de implantar, mas quando cresce é muito fácil dissociar.
Criando um umbrella
A primeira coisa que devemos construir é o aplicativo umbrella.
$ rails new umbrella_app
Nós vamos parar aqui por um tempo. Só para esclarecer. Você não pode ter vários aplicativos Rails diferentes em execução simultaneamente em um ambiente (servidor). Por que? Por causa dos namespaces. Você tem que chamar Rails.appllication para executar um único aplicativo. É aí que entra o Rails :: Engine.
É algo pelo qual estamos procurando: um aplicativo Rails com namespace que funcione em outro aplicativo Rails. Apesar de algumas desvantagens (ele só funciona em um aplicativo Rails e não em outra framework Ruby), é um bom começo quando você quer dividir seu aplicativo monolítico.
Então, como você pode esperar, o próximo passo é criar o Rails :: Engine.
Criando o mecanismo Rails
Vamos supor que teremos todos os aplicativos na pasta apps. Agora podemos gerar nosso primeiro mecanismo de rails.
$ rails plugin new --mountable apps/sub_rails
E mude para o seu diretório.
$ cd apps/sub_rails
Aqui temos outro aplicativo de rails. A primeira coisa que temos que fazer é consertar sub_rails.gemfile. Altere homepage, sumary e description, faça algo mais descritivo e remova todo TODO.
A primeira pergunta é: “Posso iniciar este aplicativo sozinho?”. Sim! Para verificar se a sub aplicação está funcionando, basta digitar:
$ cd test/dummy $ rails s
Seu aplicativo contém um aplicativo de rails falso, que monta/aumenta sua sub aplicação. Ele é usado para fins de teste, mas você também pode verificar como sua sub aplicação está funcionando.
Então, devemos fazer nossa sub aplicação para servir para alguma coisa. Certo? Certifique-se de que estamos no diretório do aplicativo apps/sub_rails.
E adicione rota index ao nosso novo controlador: apps / sub_rails / app / controller / sub_rails / hello_controller.rb:
require_dependency “sub_rails/application_controller” module SubRails class HelloController < ApplicationController def index render text: “Hello from sub_rails!” end end end
Além disso, precisamos alterar apps / sub_rails / app / config / routes.rb:
SubRails::Engine.routes.draw do root to: "hello#index" end
Apenas verifique se funciona:
$ cd test/dummy $ rails s
E vá para http: // localhost: 3000 / sub_rails no seu navegador. Eba! Funciona! Boa.
Agora vamos integrar nossa sub aplicação ao nosso aplicativo umbrella. Nós temos que mudar o diretório para o aplicativo umbrella. E a seguinte linha para o seu Gemfile
gem 'sub_rails', path: 'apps/sub_rails'
Claro, precisamos empacotar/agrupar. E não se esqueça de adicioná-lo a config / routes.rb
Rails.application.routes.draw do mount SubRails::Engine, at: 'my_sub_rails' end
E pronto! Montamos nossa sub aplicação em / my_sub_rails. Hora de testar!
$ rails s
Verifique http://localhost:3000/my_sub_rails.
Parabéns! Você acabou de criar seu primeiro mecanismo de rails.
O que vem por aí?
Não é o fim da história. Você pode adicionar qualquer aplicativo Rack e montá-lo como quiser em seu aplicativo umbrella. Você pode usar Sinatra, Roda, Grape ou até mesmo construção de aplicativos estáticos por npm. Se você acha isso interessante e quer saber como adicionar, me avise; vamos escrever sobre isso.
Espero que tenha sido útil pra você. Obrigado pela leitura! Obrigado!
***
Michał Kalbarczyk faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://blog.fazibear.me/umbrella-on-rails-ccf51b20e84c