Rails perdendo o foco em simplicidade e virando uma espécie de Hibernate para web development

Hoje tentei colocar no ar duas plataformas de e-commerce: OpenCart com PHP e Spree com Rails.

OpenCart coloquei em dois minutos para rodar em cima do meu host com apache. Já o Spree me tomou o dia inteiro e acabei desistindo. Então pensei: Não é possível. Algo está errado comigo pois o RoR é um dos frameworks mais famosos do mundo e reconhecidamente um dos mais simples de se utilizar. Então fui dar uma pesquisada no google e vi que o buraco atualmente está mais embaixo:

Resumindo:

  • Rails não é simples nem aqui nem na China. Só porque vc roda um “rails new mywebapp” e cria uma aplicação inicial do nada, não quer dizer que seja simples. Scaffolding é muito legal para brincar, mas na vida real serve para muito pouco.

  • Tente fazer qualquer coisa diferente do Rails Way e você vai ficar mais perdido que cego em tiroteio. A curva de aprendizado do Rails é GIGANTESCA.

  • A coisa ficou com tanta mágica e com tanta convenção que vc já não tem mais noção de como a coisa funciona. Coloca essas coisas aqui nesse arquivo .rb e pluff, funcionou. O porquê e o como melhor vc não tentar entender. (Me lembra muito o Hibernate)

  • Fazer deployment de uma aplicação RAILS é uma zona total. Nos últimos 6 meses esse processo já deve ter mudado umas 20 vezes. Existem dezenas de tutoriais diferentes e conflitantes espalhados pela web. Boa sorte para encontrar as informações que interessam no meio dessa zona. É apenas uma questão de executar uns 20 passos e rezar para que a coisa já não esteja obsoleta / desatualizada.

  • Ruby é uma linguagem fabulosa, mas ao mesmo tempo te permite criar código esotérico, cheio de meta-programação e black magic que vai assustar até os mais experientes, o que dirá os newbies. E o fato de ser dinâmica não colabora para robustês. Rafactory em Ruby sem um caminhão de teste unitário fica realmente muito difícil.

Minha conclusão:

  • Adoro Ruby, mas para descrever algoritmos e script. Para sistemas de back-end, onde robustês e maintainability são fundamentais, prefiro uma linguagem estática.

  • Se quer simplicidade, produtividade, leveza, pequena curva de aprendizagem, flexibilidade e prazer com altos níveis de abstração, na minha opinião suspeita só há dois frameworks web que vão te oferecer isso: Mentawai e Play. Django e CakePHP não conheço para incluir aqui, mas dizem que são muito bom tb…

Eu também! Dá pra dar nó em pingo d’água com ele.

É até engraçado que as pessoas confundam Ruby com Ruby on Rails. Quando eu digo que sei Ruby já vão logo perguntando coisas de RoR e, quando eu digo que não sei RoR, me perguntam “Ué, mas você não disse que sabia Ruby?”.

Verdade! Já ouvi muita gente dizendo isso. Já ouvi, inclusive, dizerem que nem usam o Scaffolding porque é mais fácil fazer no braço do que ficar lapidando ele depois.

Concordo! Uma vez usei um truque muito louco pra construir métodos dinamicamente de acordo com umas configurações de um script e, depois de um tempo, fiquei até assustado quando fui refatorar o código. Tem algumas coisas que devemos evitar ao máximo, não é só porque a linguagem te provê o recurso que você deve usar a toda hora.

Costumo dizer que essas coisas são como pimenta: se você usar demais vai ficar terrível e pouquíssimas pessoas vão encarar.

Uma pena eu não ter um bom conhecimento em RoR pra debater os outros pontos com você, mas confesso que já senti um pouco o que você quis dizer no post, mas como eu não usei RoR pra projetos sérios (foi mais pra estudar mesmo) não me sinto confortável pra debater isso.

Se vc quer ter uma web app digitando 5 linhas de código, nao precisa mais de programadores.

Quanto a isto é questao de entender meta-programacao/programacao funcional e estudar o por que das convencoes …

E sim acho o inferno refatorar no ruby…assim como é em JS ou qualquer outra linguagem com tipagem dinamica.

Fazer deploy é dificil ? Por que nao usa o Heroku ? Faço deploy da minha app rodando um git push.

[quote=CaioIncau]
Fazer deploy é dificil ? Por que nao usa o Heroku ? Faço deploy da minha app rodando um git push.[/quote]

Porque quero/tenho que deployar isso no meu próprio host.

[quote=saoj][quote=CaioIncau]
Fazer deploy é dificil ? Por que nao usa o Heroku ? Faço deploy da minha app rodando um git push.[/quote]

Porque quero/tenho que deployar isso no meu próprio host.[/quote]

Até agora nao tive problemas para deployar, RVM + Bundle tornam super facil gerenciar o ruby/dependencias…

Acho mais facil deployar Rails do que Java…

(saindo um pouco do foco do tópico)
Qual sua experiencia com o Play?
Li alguns comentários de que a versão 2 teve muitas mudanças em relação a 1.2 (se não me engano) e acabou ficando “pior”.
Já utilizou em projetos de médio/grande porte?

[quote=kael](saindo um pouco do foco do tópico)
Qual sua experiencia com o Play?
Li alguns comentários de que a versão 2 teve muitas mudanças em relação a 1.2 (se não me engano) e acabou ficando “pior”.
Já utilizou em projetos de médio/grande porte?[/quote]

Quando falo Play, digo Play 1. Play 2 é um delírio! Focar em Scala para obter simplicidade? Alguém deve ter ficado maluco…

Quem está ensatisfeito com o Play 2 deve tentar o Mentawai… algo mais simples, direto e bem-documentado que o Mentawai é muito difícil… É ver pra crer…

DETALHE: Com o Mentawai vc usa Ruby de forma totalmente transparente gracas a excelente integracao do framework com o JRuby… => http://www.mentaframework.org/mtw/Page/JRuby/mentawai-integracao-com-o-jruby

Bom, trabalho profissionalmente com Rails a quase 5 anos, então posso ser um pouco tendencioso na resposta :).

Realmente. Quando comecei a trabalhar com Rails ele era muito mais simples. Hoje, com a adição do Asset Pipeline, CoffeeScript e SASS, a curva de aprendizado pra quem está começando ficou MUITO maior. Deveriam deixar essas coisas de fora por padrão.
Em relação ao scaffolding, eu acho extremamente útil. Lógico, o scaffold padrão é um lixo, mas vc tem boas possibilidades de geração de código customizado. Eu tenho alguns geradores customizados que eu uso para gerar alguns componentes e são uma mão na roda. Você pode escrever geradores de código pro que vc precisar.

O principal problema é que vc precisa entender uma série de componentes antes de subir uma aplicação. Uma aplicação complexa, além do webserver, precisa de um sistema de messageria, caching, engine de indexação de textos e por ai vai. O mínimo necessário pra uma aplicação simples seria ter instalado um interpretador Ruby, o gerenciador de pacotes Rubygems, e o bundler. Acho que a dificuldade que vc encontrou é que a maioria dos tutoriais de deployment usa um servidor de aplicação com um servidor http (apache ou nginx) na frente. O setup é bem parecido com colocar o tomcat atrás do apache (http). Se vc usar o mod_rails, teu deployment passa a ser bem parecido com o deploy de uma app em PHP.

Eu tenho feito meus deployments em JRuby, no Tomcat ou no Torquebox. Ganho em velocidade de desenvolvimento com Ruby, e facilidade no deployment do Java.

O pior problema que eu vejo em ser dinâmica é a falta de ferramentas de apoio a refactoring. Vc tem que ir caçando com search+replace, e realmente, sem testes vc fica bem inseguro…

Você não está comparando a simplicidade de desenvolvimento, e sim de fazer deploy 2 aplicações open-sources já prontas

Rails nunca foi simples para fazer deploy em produção. Era fácil criar uma aplicação de teste localhost, hoje dependendo do que você quer usar e do seu SO nem isso mais é fácil…

Qualquer um consegue baixar uma aplicação PHP e instalar ela (enviar via FTP e acessar uma url de instalação) mesmo sem conhecimento em programação (já fiz isso quando adolescente). PHP é imbatível nesses casos simples, nenhuma outra linguagem que conheço é tão fácil e causa tão pouco problema de administração (memória/cpu/etc) como PHP, além de poder instalar em praticamente qualquer tipo de host que você tenha adquirido (até os gratuitos)

Acho que o principal ponto que leva à dificuldade de deployment é que a comunidade Ruby abraçou duas peças de infra: o bundler e o Rubygems. Sem entender como elas funcionam, vc vai ter dificuldades em subir qualquer app em Rails.

Seria parecido com a comunidade Java resolver que pra fazer deploy todo mundo usaria o maven (não estou comparando o maven com o Rubygems, o maven faz até cafézinho, o Rubygems só controla pacotes). Apesar o maven não ser extremamente difícil de usar, isso aumentaria a curva de aprendizado e dificultaria a instalação de uma app Java por alguém que não trabalhe com Java. Esse é o principal ponto na minha opinião.

Entretanto, como eu falei no meu post anterior, eu tenho feito meus deplyments em JRuby. Eu transformo meus sistemas em Rails em um war, usando o warbler, e faço deploy no Tomcat ou outro servidor de aplicação.

Se o pessoal começasse a fazer o mesmo, e distribuir as apps da mesma forma, facilitaria muito a instalação por quem não trabalha com Ruby. Por exemplo, o pessoal do spree poderia disponibilizar um war pronto pra instalação. Taí algo a se sugerir aos desenvolvedores do projeto :smiley:

Scaffold do jeito que vem no Rails não serve na vida real mesmo, qualquer programador com um pouco de experiência em Rails sabe disso. Mas se você tem muito código repetitivo CRUD tem como customizar o que o scaffold gera, aí a coisa fica bem interessante. Mas tem que ver se vale a pena mesmo, só se tiver muito CRUD.

Mas você tem que fazer as coisas fora do Rails Way apenas se tiver um bom motivo. 99% das vezes a estrutura do Rails vai te servir muito bem.

Exageiro. O ActiveRecord realmente tem bastante mágica, mas você vai usando os recursos mais avançados dele conforme você vai adquirindo mais experiência com a ferramenta.

O deployment em Rails é mais complicado mesmo, mas sempre tem bastante documentação. Eu recomendo usar Torquebox para fazer deploy no JBoss, é bem simples.

Novamente, você vai usando os recursos avançados da linguagem conforme o seu nível de conhecimento. Não adianta querer usar metaprogramação sem ter experiência. É um recurso que não deve ser abusado. Eu prefiro ter o recurso e correr o risco de abusar dele do que não ter o recurso.

Cada um com sua opinião :slight_smile: Eu gosto da produtividade do Rails, da pra ter um ambiente bastante produtivo e com qualidade.

Django e CakePHP tem bastante semelhanças com Rails:

Bom tenho pouca exp com rails, comecei um projeto pessoal faz pouco tempo.

Mas pelo que vou fazer, o rails está ajudando muito, eu não sei basicamente nada e já fiz muita coisa interessante.

Programo em Java a 4 anos e oq eu fiz em rails sem saber nada, em java eu faria com muito mais tempo.

Talvez para o sistema que eu estou fazendo o que o rails oferece já é sufiente, mas ae falar que algo é bom ou é ruim é muito relativo, vai depender mais de você escolher a tecnologia certa para o projeto certo.

Não adianta meter a boca em uma ou otra linguagem de programação, provavelmente vai ter pontos que uma vai ser melhor que a outra, e vice e versa, tudo depende do que você precisa fazer e escolher a melhor.

Minha humilde opinião

Já experimentei Rails e me senti velho pra isso, deixa pra geração nova :smiley: . ASP.NET MVC com Razor pra mim é o melhor framework web que já usei para maior partes dos meus casos, usando o melhor dos dois mundos.

Meu TCC comecei faz um ano o desenvolvimento.

Comecei com Struts, depois JSF, ai coloquei CDI depois tirei e coloquei Spring, de Tomcat fui pra JBoss AS 7, ahh tem o primefaces tbm…

E da-lhe nullpointer pra cima e pra baixo nessas mudanças, é claro isso é normal para uma linguagem incompleta, precisa de Frameqork pra tapa os buracos…

Fiquei um dia em casa e resolvi fazer a appzinha do TCC em Rails…

Adivinha o resultado?

Já esta quase pronta,

Em certos momentos não adiante matar mosquito com Basuca,

Sem mais,