Ruby on Rails + Ubuntu

Escrito por Victor G. em 01 abril, 2013 Ruby /

Estamos configurando o RoR aqui em nosso ambiente de desenvolvimento quando enfrentamos algumas dificuldades. Então, para ajudar qualquer iniciante nesse mundo do Ruby, estarei detalhando aqui o processo de instalação e configuração do Ruby 1.9.3 e o Rails, usando o RVM.

O RVM é um projeto bem popular entre Devs do mundo inteiro, e permite que várias instalações do Ruby sejam gerenciadas.

"Certo, Victor, mas... não podemos instalar pelo apt-get?"

Poder... podemos. O problema é que a versão do apt-get geralmente é bem desatualizada.

No momento em que estou escrevendo esse post, a versão disponível no apt é a 1.9.1 enquanto a última versão estável e a 1.9.3.

Para instalar o RVM, podemos ir até a página oficial do RVM e escolher entre duas opções: Instalar para múltiplos usuários ou para um único. A não ser que sua máquina seja um servidor, optaremos pela segunda opção.

Bom, vamos começar a instalação: Para o RVM precisaremos do curl e o git-core:

$ sudo apt-get install git-core curl

Depois disso, podemos seguir para o RVM.

$ curl -L http://get.rvm.io | bash -s stable

Pro Tip: Dependendo da velocidade da sua conexão você talvez queira pegar um copo de café enquanto espera.

Pronto, RVM instalado em ~/.rvm. Mas ainda falta alguma coisa... o RVM não está acessível pelo terminal ainda. Vamos corrigir isso carregando o RVM como uma função no .bashrc. Faça isso com o seguinte comando:

$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc

Depois disso precisamos recarregar nosso bashrc.

$ source .bashrc

Pronto. Hora de conferir se está tudo como deveria estar. Para isso, executaremos o seguinte comando:

$ type rvm | head -1

Se a resposta for "rvm is a function", então estamos prontos para começar a preparar nosso ambiente para o Ruby. Para começar, precisamos descobrir quais dependencias precisaremos baixar para satisfazer a instalação. Podemos obter com facilidade essa lista com o seguinte comando:

$ rvm requirements

O RVM retornou uma lista de dependencias para cada versão do Ruby (JRuby, IronRuby...), queremos o old-school. Então escolheremos a segunda lista.

$ sudo apt-get update
<resultado suprimido>
$ sudo apt-get --no-install-recommends install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev libgdbm-dev ncurses-dev automake libtool bison subversion pkg-config libffi-dev

Depois de tudo isso, estamos finalmente prontos para instalar o Ruby. Vamos ver em quais sabores ele está disponível.

$ rvm list known

Ok, temos uma lista bem grande...

# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-p371]
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p320]
[ruby-]1.9.3-p125
[ruby-]1.9.3-p194
[ruby-]1.9.3-p286
[ruby-]1.9.3-p327
[ruby-]1.9.3-p362
[ruby-]1.9.3[-p374]
[ruby-]1.9.3-head
[ruby-]2.0.0-rc1
ruby-head
# GoRuby
goruby
# TheCodeShop - MRI experimental patches
tcs
# jamesgolick - All around gangster
jamesgolick
# Minimalistic ruby implementation - ISO 30170:2012
mruby[-head]
# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.6.5.1
jruby-1.6.6
jruby-1.6.7.2
jruby-1.6.8
jruby[-1.7.2]
jruby-head
# Rubinius
rbx-1.0.1
rbx-1.1.1
rbx-1.2.3
rbx-1.2.4
rbx[-head]
rbx-2.0.testing
rbx-2.0.0-rc1
# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]
# Kiji
kiji
# MagLev
maglev[-head]
maglev-1.0.0
# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head
# Opal
opal
# IronRuby
ironruby[-1.1.3]
ironruby-head

Queremos a última versão estável. Vamos ficar com a 1.9.3.

$ rvm install 1.9.3

Parece que tudo correu bem. Podemos listar todas as versões instaladas pelo comando

$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]

Agora devemos escolher qual usar. 

$ rvm use 1.9.3 --default
Using /home/victor/.rvm/gems/ruby-1.9.3-p374

Pronto, temos o RVM e o Ruby instalado. Hora de instalar o Rails. Este pode ser adquirido em forma de gem, o que facilita muito a instalação. Vamos lá:

$ gem install rails

Depois de uns 3 minutos, a instalação foi finalizada. Para termos certeza:

$ rails -v
Rails 3.2.11

Nada mais justo do que testar nossa instalação fresquinha com um aplicativo simples, certo?

Então vamos lá.

$ rails new teste
 create  
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/images/rails.png
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/views/layouts/application.html.erb
      create  app/mailers/.gitkeep
      create  app/models/.gitkeep
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/secret_token.rb
      create  config/initializers/session_store.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  doc
      create  doc/README_FOR_APP
      create  lib
      create  lib/tasks
      create  lib/tasks/.gitkeep
      create  lib/assets
      create  lib/assets/.gitkeep
      create  log
      create  log/.gitkeep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/index.html
      create  public/robots.txt
      create  script
      create  script/rails
      create  test/fixtures
      create  test/fixtures/.gitkeep
      create  test/functional
      create  test/functional/.gitkeep
      create  test/integration
      create  test/integration/.gitkeep
      create  test/unit
      create  test/unit/.gitkeep
      create  test/performance/browsing_test.rb
      create  test/test_helper.rb
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor/assets/javascripts
      create  vendor/assets/javascripts/.gitkeep
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.gitkeep
      create  vendor/plugins
      create  vendor/plugins/.gitkeep
         run  bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Using rake (10.0.3) 
Using i18n (0.6.1) 
Using multi_json (1.5.0) 
Using activesupport (3.2.11) 
Using builder (3.0.4) 
Using activemodel (3.2.11) 
Using erubis (2.7.0) 
Using journey (1.0.4) 
Using rack (1.4.4) 
Using rack-cache (1.2) 
Using rack-test (0.6.2) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.2.2) 
Using actionpack (3.2.11) 
Using mime-types (1.19) 
Using polyglot (0.3.3) 
Using treetop (1.4.12) 
Using mail (2.4.4) 
Using actionmailer (3.2.11) 
Using arel (3.0.2) 
Using tzinfo (0.3.35) 
Using activerecord (3.2.11) 
Using activeresource (3.2.11) 
Using bundler (1.2.3) 
Installing coffee-script-source (1.4.0) 
Installing execjs (1.4.0) 
Installing coffee-script (2.2.0) 
Using rack-ssl (1.3.3) 
Using json (1.7.6) 
Using rdoc (3.12) 
Using thor (0.17.0) 
Using railties (3.2.11) 
Installing coffee-rails (3.2.2) 
Installing jquery-rails (2.2.0) 
Using rails (3.2.11) 
Installing sass (3.2.5) 
Installing sass-rails (3.2.6) 
Installing sqlite3 (1.3.7) with native extensions 
Installing uglifier (1.3.0) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

Agora podemos ver se está tudo certo. Execute:

$ cd teste
$ rails server

Ops. Parece que tem algo errado aqui.

/home/victor/.rvm/gems/ruby-1.9.3-p374/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

Ah. Esquecemos de uma JavaScript Engine. 

No Readme do repositório que o erro apontou (https://github.com/sstephenson/execjs) existe uma lista de runtimes (ou engines) suportadas pelo ExecJS. Vou instalar aqui o NodeJS, já que precisarei dele mais pra frente. As opções são:

  • therubyracer
  • Google V8 com Ruby
  • therubyrhino
  • Mozilla Rhino com JRuby
  • Node.js
  • Apple JavaScriptCore (que acompanha o OS X)
  • Microsoft Windows Script Host (que acompanha o Windows)

Então vamos à instalação do Node.js; a última versão disponível é a 0.8.18:

$ wget http://nodejs.org/dist/v0.8.18/node-v0.8.18.tar.gz
$ tar -xzf node-v0.8.18.tar.gz
$ cd node-v0.8.18/
$ ./configure
<resultado suprimido>
$ make

Neste momento, o Node.js está sendo compilado. Esse processo pode levar algum tempo dependendo do seu hardware. Depois de terminado, ainda falta um comando:

$ sudo make install

Vejamos o resultado:

$ node -v
v0.8.18

Tudo certo. Vamos tentar de novo. Volte para a pasta do aplicativo "teste" que criamos anteriormente e inicie o servidor.

$ cd ../teste
$ rails server
=> Booting WEBrick
=> Rails 3.2.11 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2013-02-03 22:40:41] INFO  WEBrick 1.3.1
[2013-02-03 22:40:41] INFO  ruby 1.9.3 (2013-01-15) [x86_64-linux]
[2013-02-03 22:40:41] INFO  WEBrick::HTTPServer#start: pid=16329 port=3000

Dessa vez tudo correu bem. Visite http://localhost:3000.

Se você receber as boas vindas (Welcome aboard You’re riding Ruby on Rails!), significa que o Ruby e o Rails estão instalados corretamente. Mas vamos brincar um pouco mais, e fazer o exemplo do blog, como mostrado na página oficial do RoR. Finalize o servidor pressionando ctrl + c, e utilize o scaffold com o seguinte comando:

$ rails generate scaffold post titulo:string conteudo:text
 invoke  active_record
      create    db/migrate/20130204004718_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/unit/post_test.rb
      create      test/fixtures/posts.yml
      invoke  resource_route
       route    resources :posts
      invoke  scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    erb
      create      app/views/posts
      create      app/views/posts/index.html.erb
      create      app/views/posts/edit.html.erb
      create      app/views/posts/show.html.erb
      create      app/views/posts/new.html.erb
      create      app/views/posts/_form.html.erb
      invoke    test_unit
      create      test/functional/posts_controller_test.rb
      invoke    helper
      create      app/helpers/posts_helper.rb
      invoke      test_unit
      create        test/unit/helpers/posts_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/posts.js.coffee
      invoke    scss
      create      app/assets/stylesheets/posts.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

Tudo certo até aqui. Agora precisamos atualizar o database do aplicativo.

$ rake db:migrate
==  CreatePosts: migrating ====================================================
-- create_table(:posts)
   -> 0.0013s
==  CreatePosts: migrated (0.0014s) ===========================================

E inicie o servidor de novo:

$ rails server

Agora visite http://localhost:3000/posts e brinque com seu blog de testes em RoR!


Insight

Escrito por Gustavo H. em 30 janeiro, 2013

Com certeza você já teve dias em lhe faltou inspiração. Dias em que nada deu certo. Dias em que as coisas pareciam simplesmente... Erradas. A cada passo havia a impressão de que faltava algo , os pensamentos não se alinhavam e o mundo, pesado nas suas costas, passava lentamente em preto e branco. Onde estavam as soluções?! Elas estavam todas ali agorinha mesmo! Você se vê preso entre as infinitas³ possibilidades e a monocromática realidade. Para onde foram todos? De repente ninguém mais pode ajudar. Você está por sua conta. Você precisa de uma luz. Precisa de uma ideia, e não qualquer ideia... A ideia. De repente uma faísca aparece e, num só ato, consome a escuridão numa EXPLOSÃO de genialidade. Um arrepio corre a espinha e você sabe que está chegando lá. É isso. É isso! (!) Num só lance o peso do mundo parece desaparecer. Sua alma parece completa e você se sente completo. As coisas parecem fazer sentido agora. A razão capta todos os estímulos, todas relações que compõe a realidade. As cores se tornam vivas e uma compreensão súbita, total e imediata agora ocupa o espaço antes dedicado às sombras da dúvida. Neste momento você percebe, num só lance, o caminho para a solução! Uma sensação de a l í v i o se faz presente em todos os âmbitos da alma, e o mundo parece, nem que por apenas alguns valiosos segundos, estar imerso em paz. Você deu a luz a uma ideia. Você teve um insight (!). Você teve a sua melhor ideia.