Site Scaffold


English Version (Google Translate)

Trabalhamos muito criando websites, e muitas vezes estes projetos não são voltados para empresas de TI ou que tenham um setor de TI, então também desenvolvemos um backend simples para os próprios clientes administrarem o conteúdo dos sites.

Ok, existem centenas de CMS e no mundo Rails existem alguns muito bons como o Radiant, BrowserCMS e AdvaCMS porém, todos estes CMS’s acabam sendo mais complexos do que o necessário para um projeto onde teremos apenas um catálogo de produtos e gerência de novidades.

Não faz sentido tentar ensinar um cliente que poderá criar grupos de usuários, tags, que poderá organizar as páginas em sub-páginas e etc. Simplesmente ele não vai entender, não vai usar e logo não vai gostar do nosso serviço.

Por este motivo prefiro criar o backend da forma mais simples possível, o problema é que sempre fico criando várias coisas que são praticamente padrão em todos os projetos.

Coisas como

  • posts (ou notícias), onde o cliente vai inserir noticias com fotos e paginação.
  • produtos, um catalógo listado em forma de grid com mais detalhes do produto e fotos (semelhante a exibição de um Submarino.com).
  • login, logout, signup, layout do admin.
  • formulário de contato.

Então a bastante tempo (deve ter uns 2 anos) criei um plugin chamado SiteScaffold com o único objetivo de gerar as coisas acima, um generator simples do Rails para cada um dos tópicos acima.

Nada complexo, mas algo com que eu possa dar continuidade e desenvolver mais sobre o que foi gerado.

O resultado disto está em http://github.com/danielvlopes/site_scaffold/tree/master

E para gerar cada coisa basta:

  • script/generate admin_base
  • script/generate posts
  • script/generate contact_form
  • script/generate products_catalog

Dependendo do generator chamado (não se preocupe, ao executar cada um é exibido os passos a serem seguidos) é adicionado as abaixo dependências :

restful_authentication paper_clip will_paginate jrails validatable

Como uso RSpec em todos os meus projeto não inseri nada sobre testes no plugin, pois acho que deve ser feito em Test::Unit pois nem todos usam Rspec mas Test::Unit pode ser executado dentro do Rspec. Então se alguém se habilitar a criar os test cases para o que é gerado pelo plugin seria ótimo.

Também pretendo alterar de restful authentication para authlogic, então qualquer ajuda neste ponto também será bem útil.


5 Comentários to “Site Scaffold”

AkitaOnRails diz:

Você pode criar um template de projetos (http://m.onkey.org/2008/12/4/rails-templates) que é um jeito de criar um novo projeto (usando o bom e velho comando ‘rails’ mas já executando um monte de coisas que você sempre faz em todo projeto.

Também concordo que em muitos casos, é tão simples criar um ‘CMS’ básico em Rails do zero que não compensa usar um backend inteiro cheio de features que você nunca vai usar.


Daniel lopes diz:

Opa, olá Akita.

O problema que com templates do Rails você consegue executar bem comandos rake, terminal, cria repo git, instalar gems e etc.

Mas templates no Rails não são bons para por exemplo gerar os models, inserir códigos neles que fazem o upload de imagens, associações, acrescentar código JS que vai criar campos no dom, criar views e etc.

Os templates Rails não são bons para isto pois seria um tanto de código gigante tudo acoplado em um arquivo só.

Sem contar que em alguns projeto só quero o form de contato e outro só os posts aí posso instalar o plugin rodar os generators e depois remover.

Por este motivo ainda prefiro generators para estes casos do que templates Rails.


Marcos Neves diz:

Uma outra ideia é utilizar o recurso novo de engines do Rails 2.3 Eu estou utilizando aqui. Nao eh muito bom durante o desenvolvimento pois eh preciso reiniciar o servidor quando altera algum codigo ruby no plugin. Outro problema são as migrations e gems que precisam ser configuradas na aplicacao principal. Espero que eles achem algum solução para isso logo.


Daniel Lopes diz:

@Marcos, também não considero engines para estas situações pois a idéia é apenas ter o ponta-pé inicial para continuar o desenvolvimento do projeto e não ter um sistema completo rodando de fora da pasta App.


Ronaldo C Schork Jr. diz:

Muito legal Daniel. Vai ser bastante útil para mim que estou desenvolvendo um site que tem uma área de administração de produtos e notícias. ;-)

Abraço.


Comentário