Criando um template padrão de um projeto Rails, ou adeus Bort, Blank, Suspenders e outros

4 de dezembro de 2008  |  Rails 2.3  | 

De um tempo para cá parece que virou moda a criação de projetos Rails semi-prontos. Em uma rápida pesquisa no GitHub encontrei o Bort, Blank, Suspenders, starter-app, appstarter e mais alguns menos conhecidos.

E isto é muito bom, já que na maioria das vezes usamos sempre a mesma estrutura para criar nossos projetos, os mesmos gems e plugins e o mesmo sistema de autenticação. Eu mesmo já experimentei alguns dos projetos que mencionei acima, mas eles são projetos semi-prontos criados para suprir as necessidades das equipes que os criaram e não as minhas necessidades.

Existe um projeto mais interessante do que todos estes, chamado rg. Jeremy McAnally teve a idéia de criar um script na qual você pudesse montar a sua própria estrutura de projeto, apenas relatando quais gems e plugins você deseja usar, quais arquivos criar e com que conteúdo, etc..

Percebendo a necessidade dos desenvolvedores por tais projetos semi-prontos, o core team do Rails decidiu incluir o rg no Rails. Assim ganhamos a opção de carregar um template ao criar um novo projeto Rails de forma nativa.

Nunca foi tão fácil criar um template padrão para um projeto Rails. Veja um exemplo de um template:

# Install plugins from git or svn
plugin "will-paginate", :git => "git://github.com/mislav/will_paginate.git"
plugin "old-restful-auth", :svn => "http://svn.techno-weenie.net/projects/plugins/restful_authentication/"

# Add gems to environment.rb
gem "jeremymcanally-context"
gem "bluecloth"

lib("crypto.rb") do
  "crypted_special_value = '#{rand}--#{Time.now}--#{rand(1337)}--'"
end

# ...file data from block return value.
# #initializer creates a new initializer file
initializer("crypto.rb") do
  salt = "--#{Time.now}--#{rand}--#{srand(Time.now.to_i)}"

  "SPECIAL_SALT = '#{salt}'"
end

rakefile("bootstrap.rake") do
  project = ask("What is the UNIX name of your project?")

  <<-TASK
    namespace :#{project} do
    task :bootstrap do
      puts "i like boots!"
    end
  end
  TASK
end

route "map.root :controller => :welcome"

No código acima estou definindo quais plugins devem ser instalados, quais gems devem ser adicionadas no arquivo environment.rb, também estou criando um arquivo chamado crypto.rb na pasta lib e um initializer com o mesmo nome, uma tarefa rake e adicicionando uma rota no arquivo conifg/routes.rb.

Este script pode estar armazenado na sua máquina, ou mesmo em algum site como o Gist do GitHub, por exemplo. E para criar um projeto baseado neste template basta fazer assim:

# Usando um arquivo local:
$ rails <application name> -m /path/to/my/template.rb

# Ou através de um URL:
$ rails <application name> --template=http://gist.github.com/31208.txt

Adeus Bort, Blank, Suspenders, starter-app, appstarter e tantos outros!


Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.3/3.0 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades acompanhando a série Edge Rails.



7 Comentários


  1. É o que você disse. Nunca foi tão fácil criar um projeto Rails semi pronto.

  2. Fantástico…. mas ficou uma dúvida. Por exemplo eu tenho a minha propria aplicação de template para sites e uma para softwares… para softwares eu uso bastante coisa do Restful authentication, são vários arquivos prontos ( eu nem rodo mais o generate do plugin ) como models, views, controllers para users, roles, session, password e etc.

    Como ficaria isso? Vou escrever tudo neste template ai e terei um arquivo com 5000 linhas?

    Eu tinha olhado o RG já mas o que não entendi foi exatamente isso… o Bort e os outros são diferentes, já são um aplicativo e vc começa sobre eles.

  3. @Daniel, sim, vc teria de escrever tudo ai mesmo… rs. No seu caso deve ser melhor manter teu projeto modelo.

  4. Eu faço isso com um shell script. Simples. Nem toda a aplicação que você criar terá os mesmos plugins e gems, por isso acho isso um pouco desnecessário.

  5. Uma coisa bacana desta novidade é que você pode incluir perguntas sobre o que instalar ou não instalar. Dá para personalizar bem.

  6. Hummm… é legal e economiza algum trabalho, mas somente quando não se tem que alterar muitos arquivos nas instalações dos plugins. (e não é o caso da maioria dos plugins, e.g. restful-authentication, etc)

  7. Opa, Carlos. Citei esse post no meu blog.
    http://rubyurl.com/CxHZ .
    Abraços

Trackbacks

  1. unix » Blog Archive » Criando um template padrão de um projeto Rails, ou adeus Bort, Blank, Suspenders e outros
  2. unix » Blog Archive » Criando um template padrão de um projeto Rails, ou adeus Bort, Blank, Suspenders e outros
  3. Nome do Jogo » Blog Archive » Edge Rails: rake rails:template
  4. Conheça as ‘Application Templates’ no Rails 2.3 | Ruby Brasil
  5. Criando Application Templates no Rails 2.3.2 « puts ‘hello world’

Deixe um comentário