Este tutorial assume que você tem conhecimento básico de Rails lendo o Guia de Introdução ao Rails.
Este guia é baseado no Rails 3.0. Alguns dos códigos mostrados aqui não funcionarão em versões anteriores do Rails.
- 1 Básicos em Linha de Comando
- 1.1 rails novo
- 1.2 rails server
- 1.3 rails generate
- 1.4 consola de Rails
- 1.5 rails dbconsole
- 1.6 rails plugin
- 1.7 rails runner
- 1.8 rails destroy
- 2 Rake
- 2.1 sobre
- 2.2 assets
- 2.3 db
- 2.4 doc
- 2.5 notas
- 2.6 rotas
- 2.7 test
- 2.8 tmp
- 2.9 Miscellaneous
- 3 A Linha de Comando Avançada do Rails
- 3.1 Rails com Bancos de Dados e SCM
- 3.2 servidor com Backends Diferentes
- Feedback
1 Básicos em Linha de Comando
Existem alguns comandos que são absolutamente críticos para o seu uso diário do Rails. Na ordem de quanto você provavelmente os usará são:
- rails console
- rails servidor
- rails servidor
- rails gerar
- rails dbconsole
- rails novo nome da aplicação
Vamos criar uma aplicação Rails simples para passar por cada um desses comandos em contexto.
1.1 rails novo
A primeira coisa que vamos querer fazer é criar uma nova aplicação Rails executando o novo comando Rails depois de instalar Rails.
Pode instalar a gem Rails digitando gem install rails, se você ainda não a tem. Siga as instruções nas Notas de Lançamento do Rails 3
$ rails new commandsapp create create README.rdoc create .gitignore create Rakefile create config.ru create Gemfile create app ... create tmp/cache create tmp/pids create vendor/plugins create vendor/plugins/.gitkeep
Rails irá configurá-lo com o que parece ser uma grande quantidade de coisas para um comando tão minúsculo! Tem agora toda a estrutura de directórios Rails com todo o código que precisa para correr a nossa aplicação simples directamente da caixa.
1.2 rails server
O comando rails server lança um pequeno servidor web chamado WEBrick que vem empacotado com Ruby. Você usará isto sempre que quiser acessar sua aplicação através de um navegador web.
WEBrick não é sua única opção para servir Rails. Chegaremos a isso mais tarde.
Sem mais trabalho, o servidor Rails executará nossa nova e brilhante aplicação Rails:
Com apenas três comandos, nós criamos um servidor Rails escutando na porta 3000. Vá até seu navegador e abra http://localhost:3000, você verá um aplicativo Rails básico rodando.
Você também pode usar o apelido “s” para iniciar o servidor: rails s.
O servidor pode ser executado em uma porta diferente usando a opção -p. O ambiente de desenvolvimento padrão pode ser alterado usando -e.
$ rails server -e production -p 4000
A opção -b liga o Rails ao ip especificado, por padrão é 0.0.0.0. Você pode rodar um servidor como um daemon passando uma opção -d.
1.3 rails generate
O comando generate rails usa modelos para criar um monte de coisas. Executando os trilhos de geração por si só dá uma lista de geradores disponíveis:
Você também pode usar o comando “g” para invocar o comando gerador: trilhos g.
Você pode instalar mais geradores através de gemas do gerador, porções de plugins que você sem dúvida irá instalar, e você pode até mesmo criar o seu próprio!
Usar geradores irá poupar-lhe uma grande quantidade de tempo escrevendo o código da placa de caldeira, código que é necessário para a aplicação funcionar.
Vamos fazer o nosso próprio controlador com o gerador do controlador. Mas que comando devemos usar? Vamos perguntar ao gerador:
Todos os utilitários do console Rails têm texto de ajuda. Como na maioria dos utilitários *nix, você pode tentar adicionar –help ou -h ao final, por exemplo rails server –help.
O gerador de controladores está esperando parâmetros na forma de gerar controlador ControllerName action1 action2. Vamos fazer um controlador de saudações com uma action of hello, que nos dirá algo agradável.
$ rails generate controller Greetings hello create app/controllers/greetings_controller.rb route get "greetings/hello" invoke erb create app/views/greetings create app/views/greetings/hello.html.erb invoke test_unit create test/functional/greetings_controller_test.rb invoke helper create app/helpers/greetings_helper.rb invoke test_unit create test/unit/helpers/greetings_helper_test.rb invoke assets create app/assets/javascripts/greetings.js invoke css create app/assets/stylesheets/greetings.css
O que tudo isso gerou? Ele fez com que um monte de diretórios estivessem em nossa aplicação, e criou um arquivo controller, um arquivo view, um arquivo de teste funcional, um helper para o view, um arquivo javascript e um arquivo stylesheet.
Check out the controller and modify it a little (in app/controllers/greetings_controller.rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
Então a vista, para exibir nossa mensagem (em app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
Fire o seu servidor usando o servidor Rails.
$ rails server=> Booting WEBrick...
Certifique-se de que não tem nenhum ficheiro “til backup” em app/views/(controller), caso contrário o WEBrick não mostrará a saída esperada. Isto parece ser um bug no Rails 2.3.0.
A URL será http://localhost:3000/greetings/hello.
Rails vem com um gerador para modelos de dados também.
Para uma lista de tipos de campos disponíveis, consulte a documentação da API para o método de colunas da classe TableDefinition.
Mas ao invés de gerar um modelo diretamente (o que faremos mais tarde), vamos montar um andaime. Um andaime no Rails é um conjunto completo de modelos, migração de banco de dados para esse modelo, controlador para manipulá-lo, vistas para ver e manipular os dados, e uma suíte de testes para cada um dos modelos acima.
Configuraremos um recurso simples chamado “HighScore” que manterá o controle da nossa maior pontuação em videogames que jogamos.
O gerador verifica se existem os diretórios para modelos, controladores, helpers, layouts, testes funcionais e unitários, folhas de estilo, cria as vistas, controlador, modelo e migração de banco de dados para o HighScore (criando a tabela de high_scores e campos), cuida da rota para o recurso, e novos testes para tudo.
A migração requer que nós migremos, isto é, corramos algum código Ruby (vivendo naquele 20100209025147_create_high_scores.rb) para modificar o esquema da nossa base de dados. Que base de dados? O banco de dados sqlite3 que Rails irá criar para você quando rodarmos o comando rake db:migrate. Falaremos mais profundamente sobre o Rake em pouco tempo.
Vamos falar sobre testes unitários. Testes unitários são códigos que testam e fazem afirmações sobre códigos. Nos testes unitários, nós pegamos uma pequena parte do código, digamos um método de um modelo, e testamos suas entradas e saídas. Os testes unitários são seus amigos. Quanto mais cedo você fizer as pazes com o fato de que sua qualidade de vida aumentará drasticamente quando você testar seu código unitário, melhor. Sério. Vamos fazer um num momento.
Vejamos a interface Rails criada para nós.
$ rails server
Vá ao seu navegador e abra http://localhost:3000/high_scores, agora podemos criar novas pontuações altas (55.160 em Space Invaders!)
1.4 consola de Rails
O comando da consola permite-lhe interagir com a sua aplicação Rails a partir da linha de comandos. Na parte de baixo, a consola Rails usa IRB, por isso se alguma vez a usou, estará mesmo em casa. Isto é útil para testar idéias rápidas com código e mudar o lado do servidor de dados sem tocar no website.
Você também pode usar o apelido “c” para invocar o console: rails c.
Se você deseja testar algum código sem mudar nenhum dado, você pode fazer isso invocando o console rails –sandbox.
$ rails console --sandboxLoading development environment in sandbox (Rails 3.1.0)Any modifications you make will be rolled back on exitirb(main):001:0>
1.5 rails dbconsole
rails dbconsole calcula qual a base de dados que está a utilizar e coloca-o em qualquer interface de linha de comandos que utilizaria com ele (e calcula os parâmetros de linha de comandos para lhe dar, também!). Ele suporta MySQL, PostgreSQL, SQLite e SQLite3.
Você também pode usar o apelido “db” para invocar o dbconsole: rails db.
1.6 rails plugin
O comando rails plugin simplifica a gestão de plugins. Os plugins podem ser instalados por nome ou por suas URLs de repositório. Você precisa ter o Git instalado se você quiser instalar um plugin a partir de um repo Git. O mesmo vale para Subversion também.
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner roda código Ruby no contexto do Rails não-interativamente. Por exemplo:
$ rails runner "Model.long_running_method"
Pode também usar o alias “r” para invocar o runner: rails r.
Pode especificar o ambiente em que o comando runner deve operar usando a chave -e.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
Pense em destroy como o oposto de generate. Vai descobrir o que gerar fez, e desfazê-lo.
Pode também usar o nome “d” para invocar o comando destroy: rails d.
2 Rake
Rake é Ruby Make, um utilitário Ruby autónomo que substitui o utilitário Unix ‘make’, e usa um ‘Rakefile’ e ficheiros .rake para construir uma lista de tarefas. No Rails, Rake é usado para tarefas de administração comuns, especialmente as mais sofisticadas que compilam umas das outras.
Você pode obter uma lista de tarefas Rake disponíveis para você, que muitas vezes dependerá do seu diretório atual, digitando rake –tasks. Cada tarefa tem uma descrição, e deve ajudá-lo a encontrar o que você precisa.
$ rake --tasks(in /home/foobar/commandsapp)rake db:abort_if_pending_migrations # Raises an error if there are pending migrationsrake db:charset # Retrieves the charset for the current environment's databaserake db:collation # Retrieves the collation for the current environment's databaserake db:create # Create the database defined in config/database.yml for the current Rails.env......rake tmp:pids:clear # Clears all files in tmp/pidsrake tmp:sessions:clear # Clears all files in tmp/sessionsrake tmp:sockets:clear # Clears all files in tmp/sockets
2.1 sobre
rake about dá informações sobre números de versão para Ruby, RubyGems, Rails, os subcomponentes Rails, a pasta da sua aplicação, o nome do ambiente Rails atual, o adaptador do banco de dados da sua aplicação, e a versão do esquema. É útil quando você precisa pedir ajuda, verificar se um patch de segurança pode afetar você, ou quando você precisa de algumas estatísticas para uma instalação de Rails existente.
2.2 assets
Você pode pré-compilar os assets em app/assets usando rake assets:precompile e remover aqueles assets compilados usando rake assets:clean.
2.3 db
As tarefas mais comuns do db: O espaço de nomes dos rake são migrados e criados, e será útil para experimentar todas as tarefas do rake migratório (subir, descer, refazer, reiniciar). rake db:version é útil na resolução de problemas, dizendo-lhe a versão atual do banco de dados.
Mais informações sobre migrações podem ser encontradas no guia Migrations.
2.4 doc
O doc: o espaço de nomes tem as ferramentas para gerar documentação para a sua aplicação, documentação da API, guias. A documentação também pode ser removida, o que é útil principalmente para emagrecer sua base de código, como se você estiver escrevendo uma aplicação Rails para uma plataforma embarcada.
- rake doc:app gera documentação para sua aplicação em doc/app.
- rake doc:guides gera guias Rails em doc/guides.
- rake doc:rails gera documentação API para Rails em doc/api.
- rake doc:plugins gera documentação da API para todos os plugins instalados na aplicação em doc/plugins.
- rake doc:clobber_plugins remove a documentação gerada para todos os plugins.
2.5 notas
notas do rake irão procurar no seu código por comentários que comecem com FIXME, OPTIMIZE ou TODO. A pesquisa é feita em arquivos com extensão .builder, .rb, .erb, .haml e .slim para anotações padrão e personalizadas.
Se você estiver procurando por uma anotação específica, digamos FIXME, você pode usar rake notes:fixme. Note que você tem que colocar em minúsculas o nome da anotação.
Você também pode usar anotações personalizadas no seu código e listá-las usando rake notes:custom especificando a anotação usando uma variável de ambiente ANNOTATION.
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
Quando você estiver usando anotações específicas e anotações personalizadas, o nome da anotação (FIXME, BUG etc) não é exibido nas linhas de saída.
2.6 rotas
rake routes listará todas as rotas definidas, o que é útil para rastrear problemas de roteamento em sua aplicação, ou dar-lhe uma boa visão geral das URLs em uma aplicação que você está tentando se familiarizar.
2.7 test
Uma boa descrição de testes unitários em Rails é dada em A Guide to Testing Rails Applications
Rails vem com uma suíte de testes chamada Test::Unit. Os Trilhos devem sua estabilidade ao uso de testes. As tarefas disponíveis no teste: o namespace ajuda na execução dos diferentes testes que você esperançosamente escreverá.
2.8 tmp
The Rails.O diretório root/tmp é, como o diretório *nix /tmp, o lugar de espera para arquivos temporários como sessões (se você estiver usando um armazenamento de arquivos para arquivos), arquivos id de processo, e ações em cache.
The tmp: namespaced tasks irá ajudá-lo a limpar o diretório Rails.root/tmp:
2.9 Miscellaneous
- rake stats é ótimo para olhar as estatísticas do seu código, mostrando coisas como KLOCs (milhares de linhas de código) e o seu código para testar ratio.
- rake secret lhe dará uma chave pseudo-aleatória para usar para o seu segredo de sessão.
- rake time:zones:all lista todos os fusos horários que o Rails conhece.
3 A Linha de Comando Avançada do Rails
O uso mais avançado da linha de comando é focado em encontrar opções úteis (mesmo surpreendentes às vezes) nos utilitários, e adequá-las às suas necessidades e fluxo de trabalho específico. Listados aqui estão alguns truques na manga do Rails.
3.1 Rails com Bancos de Dados e SCM
Ao criar uma nova aplicação Rails, você tem a opção de especificar que tipo de banco de dados e que tipo de sistema de gerenciamento de código fonte sua aplicação vai usar. Isso vai economizar alguns minutos, e certamente muitas teclas.
Vamos ver o que uma opção –git e uma opção –database=postgresql fará por nós:
Tivemos que criar o diretório gitapp e inicializar um repositório git vazio antes do Rails adicionar arquivos que ele criou ao nosso repositório. Vamos ver o que ele colocou em nossa configuração de banco de dados:
Ele também gerou algumas linhas em nossa configuração de banco de dados.yml correspondentes à nossa escolha do PostgreSQL para banco de dados.
O único senão com o uso das opções do SCM é que você tem que fazer primeiro o diretório da sua aplicação, depois inicializar seu SCM, depois você pode executar o novo comando Rails para gerar a base da sua aplicação.
3.2 servidor com Backends Diferentes
Muitas pessoas criaram um grande número de servidores web diferentes em Ruby, e muitos deles podem ser usados para rodar Rails. Desde a versão 2.3, Rails usa o Rack para servir suas páginas web, o que significa que qualquer servidor web que implemente um manipulador de Rack pode ser usado. Isso inclui WEBrick, Mongrel, Thin, e Phusion Passenger (para citar alguns!).
Para mais detalhes sobre a integração do Rack, veja Rails no Rack.
Para usar um servidor diferente, basta instalar sua gem, então use seu nome para o primeiro parâmetro do servidor do Rails:
Feedback
Você é encorajado a ajudar a melhorar a qualidade deste guia.
Se você vir quaisquer erros de digitação ou erros factuais que você está confiante para corrigir, por favor, clone o repositório de trilhos e abra um novo pedido de puxar. Você também pode pedir por direitos de commit em docrails se você planeja enviar vários patches. Os commits são revistos, mas isso acontece depois de teres submetido a tua contribuição. Este repositório é cruzado com o master periodicamente.
Você também pode encontrar conteúdo incompleto, ou coisas que não estão atualizadas. Por favor, adicione qualquer documentação em falta para o master. Verifique o Guia Ruby on Rails para estilo e convenções.
Se por qualquer razão você encontrar algo para corrigir mas não conseguir corrigir você mesmo, por favor abra um problema.
E por último mas não menos importante, qualquer tipo de discussão sobre a documentação do Ruby on Rails é muito bem-vinda na lista de discussão rubyonrails-docs.