sampope 1: Como criar uma aplicação no Rails 6?

Criando uma aplicação Rails 6

Neste post vamos criar uma aplicação Rails 6 do "zero".

Coloco zero entre aspas, porque vamos começar de um ponto que considera que você já tenha instalado o Ruby na sua máquina. Se não instalou, minha sugestão é usar e seguir os passos do RVM. Ele instala e controla versões do Ruby no seu computador.

Rails é uma framework para desenvolvimento web em Ruby. Eu gosto de codar em Ruby, porque é uma linguagem simples de escrever, ler, e manter. Eu adoro Rails porque segue a tradicional linha MVC e oferece gazilhões de formas de customizar ou ampliar tudo que já vem pronto através de seus próprios módulos e/ou das famosas gems.

Para mais informações sobre como instalar Ruby e Rails no seu computador, sugiro estes 2 artigos:
Instalação RailsCriando uma aplicação Rails. O segundo artigo mostra uma aplicação Rails 4. O processo aqui será praticamente o mesmo.

Blz. Vamos lá:

1 - Verifique as versões do Ruby e do Rails

Antes de começar a criar a aplicação, vamos ter certeza de que estamos usando as versões que queremos com os comandos ruby -v:

vivipoit ~
> ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]

E depois rails -v:

vivipoit ~
> rails -v
Rails 6.0.2.2

No meu caso, podemos ver que eu tenho o Ruby 2.6 e o Rails 6 instalados corretamente no meu computador, e que é com eles que estou trabalhando neste momento.

Caso seu Ruby esteja diferente, verifique se sua máquina instalou a versão que precisamos com o comando rvm list.
Se a versão que queremos aparecer, buscar usar o comando rvm use 2.6.5 para que o RVM troque de uma para a outra.
Caso a versão não tenha aparecido, você de fato precisa instalar ela. Faça isso com o comando rvm install 2.6.5.

Se o Ruby está em ordem, mas a versão do Rails está diferente, use o comando gem install rails -v 6.0.2.2 para instalar essa versão específica.
(Estou escrevendo este post menos de 10 dias depois que ela foi lançada. Seria normal a máquina ter uma versão mais antiga.)

2 - Rode o comando rails new

Agora com as versões em ordem, vamos usar o comando rails new para criar a aplicação, mas antes disso, vamos rodar rails new --help para vermos tudo que pode ser feito com este comando. O resultado é:

vivipoit ~
> rails new --help
Usage:
  rails new APP_PATH [options]

Options:
      [--skip-namespace], [--no-skip-namespace]              # Skip namespace (affects only isolated applications)
  -r, [--ruby=PATH]                                          # Path to the Ruby binary of your choice
                                                             # Default: /Users/vivipoit/.rvm/rubies/ruby-2.6.5/bin/ruby
  -m, [--template=TEMPLATE]                                  # Path to some application template (can be a filesystem path or URL)
  -d, [--database=DATABASE]                                  # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
                                                             # Default: sqlite3
      [--skip-gemfile], [--no-skip-gemfile]                  # Don't create a Gemfile
  -G, [--skip-git], [--no-skip-git]                          # Skip .gitignore file
      [--skip-keeps], [--no-skip-keeps]                      # Skip source control .keep files
  -M, [--skip-action-mailer], [--no-skip-action-mailer]      # Skip Action Mailer files
      [--skip-action-mailbox], [--no-skip-action-mailbox]    # Skip Action Mailbox gem
      [--skip-action-text], [--no-skip-action-text]          # Skip Action Text gem
  -O, [--skip-active-record], [--no-skip-active-record]      # Skip Active Record files
      [--skip-active-storage], [--no-skip-active-storage]    # Skip Active Storage files
  -P, [--skip-puma], [--no-skip-puma]                        # Skip Puma related files
  -C, [--skip-action-cable], [--no-skip-action-cable]        # Skip Action Cable files
  -S, [--skip-sprockets], [--no-skip-sprockets]              # Skip Sprockets files
      [--skip-spring], [--no-skip-spring]                    # Don't install Spring application preloader
      [--skip-listen], [--no-skip-listen]                    # Don't generate configuration that depends on the listen gem
  -J, [--skip-javascript], [--no-skip-javascript]            # Skip JavaScript files
      [--skip-turbolinks], [--no-skip-turbolinks]            # Skip turbolinks gem
  -T, [--skip-test], [--no-skip-test]                        # Skip test files
      [--skip-system-test], [--no-skip-system-test]          # Skip system test files
      [--skip-bootsnap], [--no-skip-bootsnap]                # Skip bootsnap gem
      [--dev], [--no-dev]                                    # Setup the application with Gemfile pointing to your Rails checkout
      [--edge], [--no-edge]                                  # Setup the application with Gemfile pointing to Rails repository
      [--rc=RC]                                              # Path to file containing extra configuration options for rails command
      [--no-rc], [--no-no-rc]                                # Skip loading of extra configuration options from .railsrc file
      [--api], [--no-api]                                    # Preconfigure smaller stack for API only apps
  -B, [--skip-bundle], [--no-skip-bundle]                    # Don't run bundle install
  --webpacker, [--webpack=WEBPACK]                           # Preconfigure Webpack with a particular framework (options: react, vue, angular, elm, stimulus)
      [--skip-webpack-install], [--no-skip-webpack-install]  # Don't run Webpack install

Runtime options:
  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist

Rails options:
  -h, [--help], [--no-help]        # Show this help message and quit
  -v, [--version], [--no-version]  # Show Rails version number and quit

Description:
    The 'rails new' command creates a new Rails application with a default
    directory structure and configuration at the path you specify.

    You can specify extra command-line arguments to be used every time
    'rails new' runs in the .railsrc configuration file in your home directory.

    Note that the arguments specified in the .railsrc file don't affect the
    defaults values shown above in this help message.

Example:
    rails new ~/Code/Ruby/weblog

    This generates a skeletal Rails installation in ~/Code/Ruby/weblog.

Como dito no início, o Rails já traz consigo um monte de funções, ferramentas, e códigos. Nesse comando inicial, rails new, na própria criação da aplicação, já é possível selecionar, configurar, e/ou ignorar algumas dessas ajudas.

No nosso caso, vamos usar uma ferramenta de testes diferente da padrão. (Ela será instalada no 5o post desta série.) Então, para o momento, vamos pedir para o Rails "pular" a parte de instalação das ferramentas de testes padrão. Podemos ver nas informações acima que fazemos isso acrescentando -T ao final do nosso comando.

O que também conseguimos ver acima é que o Rails, como padrão, trabalha com bancos de dados sqlite3. No 4o post desta série, nós vamos colocar nossa aplicação no Heroku, e o Heroku não trabalha com sqlite3. Então, desde já, vamos pedir para que o Rails use o postgresql ao invés do padrão. Fazemos isso acrescentando -d=postgresql.

Nosso comando também precisa de um nome para o projeto. Esta série sampope se trata de um pet project meu, então vou chamar a aplicação de sampope mesmo.

O comando completo será rails new sampope -T -d=postgresql.

Precisamos ter certeza de que o diretório que o Rails cria é colocado num lugar que a gente encontre facilmente depois. Eu gosto de manter todos os meus projetos num diretório chamado Projects, então primeiro navego lá:

vivipoit ~
> cd Projects/

E depois rodo o comando:

vivipoit ~/Projects
> rails new sampope -T -d=postgresql

O que segue é o output do Rails enquanto ele cria todos os diretórios e arquivos. Você verá vários create na sua tela.

Após criar tudo isso, o Rails roda o comando bundle install automaticamente. Você provavelmente consegue encontrar a linha run bundle install no final da lista de create. Essa é a forma que o Rails instala no seu computador todas a gems que ele precisa para rodar a aplicação.

3 - Navegue para seu novo diretório

Rodando o comando ls, agora você verá o diretório com o nome dado à aplicação. No meu caso este diretório chama sampope. Vamos navegar até lá e ver o que temos ali dentro:

vivipoit ~/Projects
> cd sampope
vivipoit ~/Projects/sampope (master)
> ls -l
total 56
-rw-r--r--   1 vivipoit  staff  1738 Mar 27 11:13 Gemfile
-rw-r--r--   1 vivipoit  staff  4901 Mar 27 11:13 Gemfile.lock
-rw-r--r--   1 vivipoit  staff   374 Mar 27 11:13 README.md
-rw-r--r--   1 vivipoit  staff   227 Mar 27 11:13 Rakefile
drwxr-xr-x  11 vivipoit  staff   352 Mar 27 11:13 app
drwxr-xr-x   7 vivipoit  staff   224 Mar 27 11:14 bin
drwxr-xr-x  16 vivipoit  staff   512 Mar 27 11:13 config
-rw-r--r--   1 vivipoit  staff   130 Mar 27 11:13 config.ru
drwxr-xr-x   3 vivipoit  staff    96 Mar 27 11:13 db
drwxr-xr-x   4 vivipoit  staff   128 Mar 27 11:13 lib
drwxr-xr-x   3 vivipoit  staff    96 Mar 27 11:13 log
-rw-r--r--   1 vivipoit  staff   219 Mar 27 11:13 package.json
drwxr-xr-x   9 vivipoit  staff   288 Mar 27 11:13 public
drwxr-xr-x   3 vivipoit  staff    96 Mar 27 11:13 storage
drwxr-xr-x   6 vivipoit  staff   192 Mar 27 11:13 tmp
drwxr-xr-x   3 vivipoit  staff    96 Mar 27 11:13 vendor

Aí está nossa aplicação! Podemos ver que o Rails instalou um monte de arquivos e inclusive ajustou suas permissões conforme ele precisa para rodar. Será que está tudo certo? Vamos descobrir!

4 - Rode o comando rails webpacker:install

Uma das grandes novidades no Rails 6, é que o webpacker é o compilador padrão para os arquivos em JavaScript. De forma bem simplificada, podemos dizer que ele ajuda o Rails a usar e abusar do conhecido webpack.

Reza a lenda que ao criar uma aplicação em Rails 6, o Rails já prepara e instala tudo para o webpacker rodar. Eu ainda não tive essa sorte,  e por isso rodo o comando rails webpacker:install.

Se tudo correr bem, no final ele comemora com festa e bolo na linha que diz Webpacker successfully installed.

5 - Rode o comando rails db:setup

Nossa aplicação agora existe no sentido do código todo estar aí para ela rodar, mas, se rodarmos ela agora, veremos uma tela de erro do Rails, dizendo que ele não encontrou o banco de dados especificado.

Para iniciarmos nosso banco de dados, vamos rodar o comando rails db:setup. Ele cria os bancos e mostra o feedback. Algo assim:

vivipoit ~/Projects/sampope (master)
> rails db:setup
Created database 'sampope_development'
Created database 'sampope_test'

6 - Rode o comando rails s

Agora sim, vamos rodar nossa aplicação!

rails s é o comando que nos permite rodar o rails server. Ele já vem dentro do Rails, faz parte desse mundo de coisas que o Rails criou e instalou, e é um serverzinho que nos permite rodar a aplicação e vê-la funcionando sem muito esforço.

vivipoit ~/Projects/sampope (master)
> rails s
=> Booting Puma
=> Rails 6.0.2.2 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.3 (ruby 2.6.5-p114), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000
Use Ctrl-C to stop

Isso parece legal. Para termos certeza de que nossa aplicação está funcionando, vamos para um navegador olhar este endereço que mostra ali na linha Listening on tcp://127.0.0.1:3000. O que temos lá?


Show de bola! Aí está nossa aplicação!

Agora podemos incrementar e desenvolver ela nos próximos posts dessa série! :-)

Nenhum comentário:

Postar um comentário

E depois que seu código funciona, o que mais ele pode fazer?

Conhecer um idioma e se comunicar bem nele são a mesma coisa? Nem sempre, né? Você pode saber vocabulário, gramática, e até gírias, mas se n...