Java 7: simple installation on Linux Lubuntu

Installing Java version 7 on a Linux Lubuntu system.

Summary

We describe here, in a simple way, how to install Java 7, in a Linux system such as Ubuntu, Lubuntu, Kubuntu.
This post assumes the reader is familiar with Linux.

Technologies we use in this post

  • Linux Lubuntu 12.04 (http://lubuntu.net)
    Why we are using Lubuntu:
    Lubuntu is an Open Source, fast and lightweight operating system, focused on speed and energy-efficiency. The core of the system is based on Linux and Ubuntu. Lubuntu uses the minimal desktop LXDE, and a selection of light applications. Because of this, Lubuntu has very low hardware requirements.

Java 7 Repository: Download and Update

  1. Add the following repository and update it.
  2. sudo add-apt-repository ppa:webupd8team/java
  3. sudo apt-get update

Java 7: JDK Installation

  • JDK stands for Java Development Kit. It contains the tools needed to create Java programs and comes with JRE, The Java Runtime Environment.
  • sudo apt-get install oracle-jdk7-installer

Check Java 7 Installation

  1. java -version
  2. javac -version

Java 6: JDK/JRE Installation

  • But, if for some reason you still continue need to use Java version 6, it is available now from webupd8team repository. You can simply install oracle java 6 with:
  • sudo apt-get install oracle-java6-installer

And that’s it! We have installed Java 7 using Linux Lubuntu in this case.

Creating a Lubuntu Virtual Machine with Parallels for Mac

Creating a Lubuntu 12.04 Virtual Machine with Parallels Desktop 9 for Mac.

Summary

We describe here, how to create a Lubuntu-based virtual machine (VM) with Parallels (virtualization software for Mac), to be used in a Macbook.
This post assumes the reader is familiar with Linux and a virtualization application such as Virtualbox or Parallels.The goal here is to create a fast, light and clean software development environment mainly to work with open source technologies such as Java and/or Ruby On Rails.

Technologies we use in this post

  • Linux Lubuntu 12.04 (http://lubuntu.net)
    Why we are using Lubuntu:
    Lubuntu is an Open Source, fast and lightweight operating system, focused on speed and energy-efficiency. The core of the system is based on Linux and Ubuntu. Lubuntu uses the minimal desktop LXDE, and a selection of light applications. Because of this, Lubuntu has very low hardware requirements.
  • Lubuntu 12.04 (Precise Pangolin)
  • Parallels Desktop 9 for Mac)
    Parallels Desktop for Mac is a hardware emulation virtualization software.
  • OS X 10.9.1 Mavericks

Download

  1. Download 64-bit Linux Lubuntu ISO image for Mac. This image is adjusted to work properly on Mac systems:
    64-bit Mac (AMD64) desktop CD
  2. Download and install Parallels Desktop for Mac. There’s a 14 days free trial: http://www.parallels.com/downloads/desktop/

Create a new virtual machine in Parallels

  1. Install Parallels Desktop on your Mac
  2. Open Parallels Desktop
  3. Install a Linux Lubuntu Virtual Machine
    1. File >> New… >> Continue
    2. Choose “Image File”
    3. Drag the Lubuntu ISO image into dotted box
    4. Continue
    5. Select as operating system: More Linux >> Debian GNU/Linux
    6. ok
    7. Name: Lubuntu 13.04 for Mac
    8. Continue
  4. After that, you’ll see the first screen Lubuntu configuration. Answer the questions according to your needs.
  5. Wait for Lubuntu installation. Click restart button when asked.
  6. Force quit, if you’re facing a frozen screen, by clicking “Shut down” Parallels command.
  7. If everything went well, by this point, you have a virtual machine named “Lubuntu 13.04 for Mac”

Install Virtual Machine Software Tools

  • Most of the cases virtual machines allow tools to install.
  • In our case isn’t different. Let’s install Parallels virtual machine tools.
  1. In Parallels Desktop, click to start your new “Lubuntu 13.04 for Mac” virtual machine.
  2. if asked, answer your username and password
  3. If asked, answer NO to update Lubuntu.
  4. Execute the following commands:
    1. In Parallels Desktop menu, click: Virtual Machine >> Install Parallels Tools… >> Continue
    2. To install Parallels Tools, open a terminal (LXTerminal): Control+Option+T
    3. Go to the CD/DVD drive directory: cd /media/your-user-name/Parallels Tools
    4. Run the following command as root: “sudo ./install”.
    5. Press “next” button 3 times.
  5. Wait while downloading and installing are in progress.
  6. Press reboot button to restart your virtual machine.

Install Linux Lubuntu Updates

  • After installing Parallels tools, open LXTerminal and using the command line, install the lastest Lubuntu distribution updates.
    1. sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
    2. This can take a while.

    3. sudo apt-get clean

Configure Lubuntu Virtual Machine

  • After updating to the lastest Lubuntu distribution, let’s configure an option.
  • Go to the Parallels Desktop menu:
    1. Virtual Machine >> Configure… >> Options >> Applications
    2. Share Linux Applications with Mac: uncheck

Configure Lubuntu

  • After that, we only need one more adjustment. In the Lubuntu desktop screen:
    1. Initial button >> Preferences >> Desktop Preferences:
    2. Change the background mode to: “Tile the image to fill the entire screen”

And that’s it! We have installed and configured a Linux Lubuntu virtual machine in Parallels Desktop for Mac.

Other Posts

Configuração: acentuação no Linux Lubuntu 12.04

Configuração do teclado para acentuação em português, usando Linux Lubuntu versão 12.04.

I – Introdução

Se você quer configurar seu teclado padrão US como meu caso – um Macbook com Linux virtualizado – vá primeiro neste meu artigo anterior (Configuração: acentuação no Linux Lubuntu 12.04) e execute os passos dele, antes de continuar aqui.

Vamos a sequência de comandos usando o terminal (prompt) do Linux Lubuntu.

II – Principais tecnologias usadas neste artigo

  • Linux Lubuntu 12.04

III – Sequência de passos para configuração

Passo 01.

  • Abra o terminal e procure pelo arquivo gtk.immodules
      $ sudo find / -name gtk*immodules -print

Passo 02.

  • Usando um editor de sua preferência – vi, vim, gedit, por exemplo – edite o arquivo “gtk.immodules” usando o comando “sudo”
  • Localize a linha abaixo e faça a substituição conforme indicado.
  • Onde você encontrar a linha:
      “cedilla” “Cedilla” “gtk20” “/usr/share/locale” “az:ca:co:fr:gv:oc:pt:sq:tr:wa”
  • Troque por:
      “cedilla” “Cedilla” “gtk20” “/usr/share/locale” “az:ca:co:fr:gv:oc:pt:sq:tr:wa:en”

IV – Testando a Acentuação

        • Para testar, saia (shutdown) do Linux e carregue novamente.
        • A acentuação deve permanecer.
        • Este artigo foi escrito usando essa configuração 😉

Pronto!
Configuramos o teclado no Linux Lubuntu versao 12.04 para aceitar o teclado de um Macbook, padrão americano e permitir acentuação em português.

V – Referências e Créditos

(1) http://www.tennehu.net.br/2012/12/mapeando-o-teclado-de-c-para-c.html

Autenticação – Permitir login com nome de usuário ou email

I – Introdução

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.2
  • Rails 3.2.1
  • gem Devise 2.0

III – O que não precisamos instalar

IV – O que precisa ser feito antes

V – Sequência de passos para implementação

Passo 01 – Entre na aplicação que criamos anteriormente

$ cd service_desk

Passo 02 – Corrigir mensagens

  • Para que o app tenha menos código e fique mais DRY (Don’t repeat yourself), vamos corrigir duas views.
  • Em app/views/tickets/show.html.erb, retire a seguinte linha
<p id="notice"><%= notice %></p>
  • Em app/views/layouts/application.html.erb, modifique a “section main” para que fique da seguinte maneira:
<section id="main">
   <p class="notice"><%= notice %></p>
   <p class="alert"><%= alert %></p>
   <%= yield %>
</section>

Passo 03 – Inclua a coluna username na tabela de usuários (Users)

  • A coluna username será única (uniq) na tabela Users.
  • A migration irá gerar um índice na mesma tabela Users, para otimizar os acessos pela chave username.
$ rails g migration add_username_to_users username:string:uniq
$ bundle exec rake db:migrate

Passo 04 – Gere as views do Devise

  • Para incluir o campo username, que terá a label “login” nas views do Devise, é necessário personalizar as mesmas views.
  • Vamos, agora, gerar todas a views do Devise para que seja possível personalizar as telas de registro de usuário, de login de usuário, e tela de modificação de senha.
$ rails g devise:views
  • Veja abaixo que foram criados a pasta “devise” e as pastas e arquivos (views) do Devise.
$ tree app/views/devise/
app/views/devise/
├── confirmations
│   └── new.html.erb
├── _links.erb
├── mailer
│   ├── confirmation_instructions.html.erb
│   ├── reset_password_instructions.html.erb
│   └── unlock_instructions.html.erb
├── passwords
│   ├── edit.html.erb
│   └── new.html.erb
├── registrations
│   ├── edit.html.erb
│   └── new.html.erb
├── sessions
│   └── new.html.erb
└── unlocks
    └── new.html.erb

6 directories, 11 files

Passo 05 – Modifique as views do Devise a seguir

  • Na view app/views/devise/sessions/new.html.erb:
<div><%= f.label :email %><br /> # delete essa linha
<%= f.email_field :email %></div> # delete essa linha
<div><%= f.label :login %><br /> # insira essa linha
<%= f.text_field :login %></div>  # insira essa linha
  • Na view app/views/devise/registrations/new.html.erb:
<div><%= f.label :username %><br /> # insira essa linha
<%= f.text_field :username %></div> # insira essa linha
<div><%= f.label :email %><br /> # mantenha essa linha
<%= f.email_field :email %></div> # mantenha essa linha
  • Na view app/views/devise/registrations/edit.html.erb:
<div><%= f.label :username %><br /> # insira essa linha
<%= f.text_field :username %></div> # insira essa linha
<div><%= f.label :email %><br /> # mantenha essa linha
<%= f.email_field :email %></div> # mantenha essa linha
  • Na view app/views/devise/passwords/new.html.erb:
<div><%= f.label :email %><br /> # delete essa linha
<%= f.email_field :email %></div> # delete essa linha
<div><%= f.label :login %><br /> # insira essa linha
<%= f.text_field :login %></div> # insira essa linha

Passo 06 – Modifique a label das views para que mostre “username or email” ao usuário

  • Modifique o arquivo /config/locales/en.yml para que fique parecido com o trecho abaixo:
en:
  hello: "Hello world"            

  activerecord:
    attributes:
      user:
        login: "Username or email"

Passo 07 – Indique ao Devise para que use :login no authentication_keys

  • Modifique o arquivo /config/initializers/devise.rb para que tenha:
config.authentication_keys = [ :login ]

Passo 08 – Agora várias alterações do model User serão necessárias

  • Modifique o arquivo /app/model/user.rb para que tenha:
attr_accessible :username, :login

# Virtual attribute for authenticating by either username or email
# This is in addition to a real persisted field like 'username'
attr_accessor :login

# Overwrite Devise’s find_for_database_authentication method
def self.find_for_database_authentication(warden_conditions)
   conditions = warden_conditions.dup
   login = conditions.delete(:login)
   where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value =>
     login.strip.downcase }]).first
end

protected

 # Attempt to find a user by it's email. If a record is found, send new
 # password instructions to it. If not user is found, returns a new user
 # with an email not found error.
 def self.send_reset_password_instructions(attributes={})
   recoverable = find_recoverable_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
   recoverable.send_reset_password_instructions if recoverable.persisted?
   recoverable
 end 

 def self.find_recoverable_or_initialize_with_errors(required_attributes, attributes, error=:invalid)
   (case_insensitive_keys || []).each { |k| attributes[k].try(:downcase!) }

   attributes = attributes.slice(*required_attributes)
   attributes.delete_if { |key, value| value.blank? }

   if attributes.size == required_attributes.size
     if attributes.has_key?(:login)
        login = attributes[:login]
        record = find_record(login)
     else
       record = where(attributes).first
     end
   end  

   unless record
     record = new

     required_attributes.each do |key|
       value = attributes[key]
       record.send("#{key}=", value)
       record.errors.add(key, value.present? ? error : :blank)
     end
   end
   record
 end

 def self.find_record(login)
   where(["username = :value OR email = :value", { :value => login }]).first
 end

Passo 09 – Alimentar dados automaticamente no sistema

  • Vamos usar comandos de inserção de dados, dentro do arquivo “seed.rb”
  • Cada vez que alguém iniciar este projeto do zero, será possível inicia-lo com esses dados de exemplo.
  • Desta forma, teremos quatro usuários já cadastrados no sistema, todos com a senha 123456:
    • superuser
    • admin
    • user
    • user1
  • Modifique o arquivo /db/migrate/seeds.rb para que tenha:
superuser_user = User.create!(:username => 'superuser',
                              :email => 'superuser@example.com',
                              :password => '123456',
                              :password_confirmation => '123456',
                              :confirmed_at => Time.now )
admin_user = User.create!(:username => 'admin',
                          :email => 'admin@example.com',
                          :password => '123456',
                          :password_confirmation => '123456',
                          :confirmed_at => Time.now )
user_user = User.create!(:username => 'user',
                         :email => 'user@example.com',
                         :password => '123456',
                         :password_confirmation => '123456',
                         :confirmed_at => Time.now )
user1_user = User.create!(:username => 'user1',
                          :email => 'user1@example.com',
                          :password => '123456',
                          :password_confirmation => '123456',
                          :confirmed_at => Time.now )                               

# create ticket #1
tkt1 = Ticket.create!( ticket_number: "00001", title: "ticket number 00001" )
Task.create!( description: "task 001 of ticket 00001", ticket_id: tkt1.id )         

# create ticket #2
tkt2 = Ticket.create!( ticket_number: "00002", title: "ticket number 00002" )
Task.create!( description: "task 001 of ticket 00002", ticket_id: tkt2.id )
Task.create!( description: "task 002 of ticket 00002", ticket_id: tkt2.id )         

# create ticket #3
tkt3 = Ticket.create!( ticket_number: "00003", title: "ticket number 00003" )
Task.create!( description: "task 001 of ticket 00003", ticket_id: tkt3.id )
Task.create!( description: "task 002 of ticket 00003", ticket_id: tkt3.id )
Task.create!( description: "task 003 of ticket 00003", ticket_id: tkt3.id )
  • Para que o seed acima seja executado, execute o comando:
$ bundle exec rake db:seed

Passo 10 – Conferencia dos Models

  • Agora o seu model Ticket (app/model/ticket.rb) terá que ficar assim:
 class Ticket < ActiveRecord::Base
  has_many :tasks    validates :ticket_number, presence: true
  accepts_nested_attributes_for :tasks, :reject_if => proc { |a| a[:description].blank? }, allow_destroy:
 ...true
   attr_accessible :ticket_number, :title
 end
  • E seu model Task (app/model/task.rb) assim:
class Task < ActiveRecord::Base
  belongs_to :ticket
  attr_accessible :description, :ticket_id
end

Passo 11 – Execute a aplicação localmente

$ rails server

VI – Final Feliz

Pronto!
Fizemos o básico para que nosso app web aceite username ou o email do usuário.
Também criamos um arquivo “seed” que poderá ser usado para criar dados iniciais (inclusive usuários) de exemplo no sistema.

VII – Referências

  1. Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
  2. Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
  3. Aplicação “mestre detalhe” em Rails 3.2.1
  4. Autenticação em Ruby On Rails 3.2.1 com Devise
  5. How To: Allow users to sign in using their username or email address

Autenticação em Ruby On Rails 3.2.1 com Devise

I – Introdução

  • Neste post vamos mostrar como implementar a autenticação básica num app web usando a gem Devise com o Rails versão 3.2.1.
  • Da autoria da Plataforma Tecnologia, a gem Devise é uma solução flexível para criar aplicações web com o recurso de autenticação.
  • Além de permitir que usuários do app web realizem as operações de “sign in” e “sign up”, oferece recursos que são comuns para app que necessitam de gerenciamento de usuários.
  • Neste artigo vamos continuar a construir um app web, que iniciamos anteriormente.
  • O código fonte gerado neste artigo, está hospedado no Github em https://github.com/sergiosouzalima/service_desk

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.2
  • Rails 3.2.1
  • gem Devise 2.0

III – O que não precisamos instalar

IV – O que precisa ser feito antes

V – Sequência de passos para utilização

Passo 01 – Entre na aplicação que criamos anteriormente

$ cd service_desk

Passo 02 – Gemfile: adicione as gems necessárias

  • Ajuste seu arquivo Gemfile para que fique assim:
gem 'devise', '2.0.0'

Passo 03 – Execute o bundle

$ bundle install

Passo 04 – Crie uma nova página inicial para este app

$ rails g controller Pages index
$ rm public/index.html

Passo 05 – Acrescente a autenticação pelo Devise

$ rails g devise:install
$ rails g devise user
  • Estes comandos vão gerar os seguintes arquivos:
    • config/initializers/devise.rb
    • config/locales/devise.en.yml
    • db/migrate/………….._devise_create_users.rb
    • app/models/user.rb
    • e dentro do arquivo “route”:  devise_for :users
  • Ajuste o arquivo app/mode/user.rb para que fique da seguinte maneira:
class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable,
    :token_authenticatable, :confirmable, :lockable, :timeoutable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :confirmed_at
end
  • Copie e cole a migration gerada para User. Está em db/migrate/……._devise_create_users.rb:
class DeviseCreateUsers < ActiveRecord::Migration   
  def change     create_table(:users) do |t|
      ## Database authenticatable
      t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, :default => 0
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Encryptable
      t.string :password_salt

      ## Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      t.integer  :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
      t.string   :unlock_token # Only if unlock strategy is :email or :both
      t.datetime :locked_at

      ## Token authenticatable
      t.string :authentication_token

      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    add_index :users, :confirmation_token,   :unique => true
    add_index :users, :unlock_token,         :unique => true
    add_index :users, :authentication_token, :unique => true
  end
  • O comando abaixo irá executar a migração de dados (migration) e criar a tabela de usuários:
$ bundle exec rake db:migrate
  • Repare que na resposta do comando de migração de dados, foi criada automaticamente uma chave única (:unique=>true) para evitar a repetição do email do usuário.
== DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
-> 0.0469s
-- add_index(:users, :email, {:unique=>true})
-> 0.0012s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0011s
== DeviseCreateUsers: migrated (0.0593s) =====================================
  • Agora crie uma verificação para que a página inicial do app, nos direcione para a página de login se o usuário não estiver logado.
  • No arquivo app/controllers/pages_controller.rb, inclua a linha “before_filter :authenticate_user!”
class PagesController < ApplicationController
  before_filter :authenticate_user!

  def index
  end

end
  • No arquivo config/environments/development.rb, acrecente as seguintes linhas
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => '587',
:authentication => :plain,
:domain => 'gmail.com',
:user_name => 'joao_da_silva',
:password => '123456'
}

Passo 06 – Ajuste o layout

  • Certifique-se que seu arquivo app/views/layouts/application.html.rb, esteja igual ao seguinte
<!DOCTYPE html>
<html>
  <head>
    <title>Service Desk</title>
    <%= stylesheet_link_tag "application", :media => "all"  %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>

  <body>
    <header>
      <h1>Service Desk | Tickets Controller</h1>
    </header>
    <nav>
      <% if user_signed_in? %>
        Signed in as <%= current_user.email %>
        <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
      <% else %>
        <%= link_to "Sign up", new_user_registration_path %>
        <%= link_to "Sign in", new_user_session_path %>
      <% end %>
    </nav>
    <section id="main">
      <div class="flash">
        <% flash.each do |type, message| -%>
          <div class="message <%= type %>">
            <p><%= message %></p>
          </div>
        <% end -%>
      </div>
      <%= yield %>
    </section>
    <footer>
      <sub>Service Desk | Ticket Controller Web Application</sub>
    </footer>
</body>
</html>

Passo 07 – Ajuste a página principal

  • Certifique-se que seu arquivo app/views/pages/index.html.rb, esteja igual ao seguinte
<h1>Home</h1>

<%= link_to 'Tickets', tickets_path %>

Passo 08 – Adicione um desvio da página dos tickets para a página principal e ajuste as rotas.

  • Certifique-se que seu arquivo app/views/tickets/index.html.rb, as duas últimas linhas sejam as seguintes
<%= link_to 'New Ticket', new_ticket_path %> |
<%= link_to 'Home', root_path %>
  • No arquivo config/routes.rb, garanta que suas rotas estejam como abaixo
resources :tickets
devise_for :users
root :to => "pages#index"

Passo 09 – Execute a aplicação localmente

$ rails server

http://localhost:3000

VI – Final Feliz

Pronto!
Fizemos o básico para implementar uma autenticação simples num app web com a gem Devise usando Rails versão 3.2.1.

VII – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
(3) Aplicação “mestre detalhe” em Rails 3.2.1

Aplicação “mestre detalhe” em Rails 3.2.1

I – Introdução

  • Neste post vamos mostrar os pontos mais importantes, comumente usados ao criarmos um app web usando o formato “mestre detalhe”
  • Vamos criar uma aplicação web para controle de chamados (tickets), muito comum em ambientes como um Service Desk, que será o nome de nossa aplicação.
  • Para cada ticket, existem várias tarefas associadas, que chamamos aqui de tasks.
  • A continuação deste artigo está em Autenticação em Ruby On Rails 3.2.1 com Devise.

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.2
  • Rails 3.2.1

III – O que não precisamos instalar

IV – Sequência de passos para criação

Passo 01 – Crie a aplicação 

$ rails new service_desk
$ cd service_desk

Passo 02 – Ajuste seu arquivo Gemfile

  • Acrescente as linhas abaixo no arquivo Gemfile
gem 'execjs'    # necessário para Linux
gem 'therubyracer'  # necessário para Linux
  • em seguida…
$ bundle install

Passo 03 – Crie os models da aplicação e execute as migrations

$ rails g scaffold ticket ticket_number:string:uniq title:string
$ rails g model task description:string ticket:belongs_to
$ bundle exec rake db:migrate

Passo 04 – Ajuste os models Ticket e Task conforme estão a seguir 

class Ticket
  has_many :tasks
  attr_accessible :ticket_number, :title, :tasks_attributes
  validates :ticket_number, presence: true
  accepts_nested_attributes_for :tasks, :reject_if => proc { |a| a[:description].blank? }, allow_destroy: true
end 

class Task
  belongs_to :ticket
  attr_accessible :description
end

Passo 05 – Copie e cole o arquivo application.html.erb, que está a seguir

  • app/views/layouts/application.html.erb  
<!DOCTYPE html>
<html>
  <head>
    <title>Service Desk</title>
    <%= stylesheet_link_tag "application" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>

  <body>
    <header>
      <h1>Service Desk | Tickets Controller</h1>
    </header>
    <section id="main">
      <%= yield %>
    </section>
    <footer>
      <sub>Service Desk | Ticket Controller Web Application</sub>
    </footer>
  </body>
</html>

Passo 06 – Ajustes para mostrar as tarefas (Tasks)

  • Em app/views/tickets/_form.html.erb, adicione o trecho abaixo, antes do botão submit:
<hr/>
 <h2>Task</h2>
 <table>
   <tr><th>Task</th><th>destroy ?</th></tr>
   <% @ticket.tasks.each do |tsk| %>
     <%= f.fields_for :tasks, tsk do |tsk| %>
       <%= render :partial => 'task', locals: {t: tsk} %>
     <% end %>
   <% end %>
 </table>
 <hr/>
  • Crie um arquivo: app/views/tickets/_task.html.erb
  • Copie e cole o seguinte conteúdo
<tr>
   <td class="field">
     <%= t.text_field :description %>
   </td>
   <td>
     <%= t.check_box :_destroy %>
   </td>
 </tr>

Passo 07 – Ajustes para exibição de Ticket e Tasks

  • Em app/views/tickets/show.html.erb
  • Substitua o que estiver abaixo do campo title, pelo seguinte trecho de código
<hr/>
 <h2>Task</h2>
 <table>
   <tr>
     <th>Task
     </th>
   </tr>
   <% @ticket.tasks.each do |tsk| %>
     <tr>
       <td class="field">
         <%= tsk.description %>
       </td>
     </tr>
   <% end %>
 </table>
 <hr/>
<%= link_to 'New Ticket', new_ticket_path %> |
<%= link_to 'Edit', edit_ticket_path(@ticket) %> |
<%= link_to 'View All', tickets_path %>

Passo 08 – Ajuste as actions New e Edit 

  • Em app/controllers/tickets_controller.rb
  • Ajuste as actions New e Edit para que fiquem como a seguir
def new
 @ticket = Ticket.new
 @ticket.tasks.build
 respond_to do |format|
   format.html # new.html.erb
   format.json { render json: @ticket }
 end
end

def edit
 @ticket = Ticket.find(params[:id])
 @ticket.tasks.build
end

V – Executando a aplicação

  • Para ver o resultado localmente. 
$ rails s

VI – Final Feliz

Pronto! Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.2.1 no Linux Ubuntu 11.10. A aplicação funciona mantendo dois Models: Ticket e Tasks, num formulário tipo mestre-detalhe.

VII – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2 

Aplicação “mestre detalhe” em Rails 3.1.3

I – Introdução

  • Neste post vamos mostrar os pontos mais importantes comumente usados ao criarmos um app web usando o formato “mestre detalhe”.
  • Vamos criar uma aplicação web para controle de chamados (tickets), muito comum em ambientes como um Service Desk, que será o nome de nossa aplicação.
  • Para cada ticket, existem várias tarefas associadas, que chamamos aqui de tasks.
  • Se preferir usar o Rails versão 3.2.1, vá para este post.

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.2
  • Rails 3.1.3

III – O que não precisamos instalar

IV – Sequência de passos para criação

Passo 01 – Crie a aplicação 

$ rails new service_desk
$ cd service_desk

Passo 02 – Ajuste seu arquivo Gemfile

  • Acrescente as linhas abaixo no arquivo Gemfile
gem 'execjs'    # necessário para Linux
gem 'therubyracer'  # necessário para Linux
  • em seguida…
$ bundle install

Passo 03 – Crie os models da aplicação e execute as migrations

$ rails g scaffold ticket ticket_number:string title:string
$ rails g model task description:string ticket:belongs_to
$ bundle exec rake db:migrate

Passo 04 – Ajuste os models Ticket e Task conforme estão a seguir 

class Ticket
  has_many :tasks
  attr_accessible :ticket_number, :title, :tasks_attributes
  validates :ticket_number, presence: true
  accepts_nested_attributes_for :tasks, :reject_if => proc { |a| a[:description].blank? }, allow_destroy: true
end 

class Task
  belongs_to :ticket
  attr_accessible :description
end

Passo 05 – Copie e cole o arquivo application.html.erb, que está a seguir

  • app/views/layouts/application.html.erb  
<!DOCTYPE html>
<html>
  <head>
    <title>Service Desk</title>
    <%= stylesheet_link_tag "application" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>

  <body>
    <header>
      <h1>Service Desk | Tickets Controller</h1>
    </header>
    <section id="main">
      <%= yield %>
    </section>
    <footer>
      <sub>Service Desk | Ticket Controller Web Application</sub>
    </footer>
  </body>
</html>

Passo 06 – Ajustes para mostrar as tarefas (Tasks)

  • Em app/views/tickets/_form.html.erb, adicione o trecho abaixo, antes do botão submit:
<hr/>
 <h2>Task</h2>
 <table>
   <tr><th>Task</th><th>destroy ?</th></tr>
   <% @ticket.tasks.each do |tsk| %>
     <%= f.fields_for :tasks, tsk do |tsk| %>
       <%= render :partial => 'task', locals: {t: tsk} %>
     <% end %>
   <% end %>
 </table>
 <hr/>
  • Crie um arquivo: app/views/tickets/_task.html.erb
  • Copie e cole o seguinte conteúdo
<tr>
   <td class="field">
     <%= t.text_field :description %>
   </td>
   <td>
     <%= t.check_box :_destroy %>
   </td>
 </tr>

Passo 07 – Ajustes para exibição de Ticket e Tasks

  • Em app/views/tickets/show.html.erb
  • Substitua o que estiver abaixo do campo title, pelo seguinte trecho de código
<hr/>
 <h2>Task</h2>
 <table>
   <tr>
     <th>Task
     </th>
   </tr>
   <% @ticket.tasks.each do |tsk| %>
     <tr>
       <td class="field">
         <%= tsk.description %>
       </td>
     </tr>
   <% end %>
 </table>
 <hr/>
<%= link_to 'New Ticket', new_ticket_path %> |
<%= link_to 'Edit', edit_ticket_path(@ticket) %> |
<%= link_to 'View All', tickets_path %>

Passo 08 – Ajuste as actions New e Edit 

  • Em app/controllers/tickets_controller.rb
  • Ajuste as actions New e Edit para que fiquem como a seguir
def new
 @ticket = Ticket.new
 @ticket.tasks.build
 respond_to do |format|
   format.html # new.html.erb
   format.json { render json: @ticket }
 end
end

def edit
 @ticket = Ticket.find(params[:id])
 @ticket.tasks.build
end

V – Executando a aplicação

  • Para ver o resultado localmente. 
$ rails s

VI – Final Feliz

Pronto! Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.1.3 no Linux Ubuntu 11.10. A aplicação funciona mantendo dois Models, Ticket e Tasks, num formulário tipo mestre-detalhe.

VII – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
(3) Aplicação “mestre detalhe” em Rails 3.2.1

Ruby On Rails 3.1.3 com a gem Nifty Generators (compatibilizando)

I – Introdução

Neste post vamos mostrar como usar a gem Nifty Generators com o Rails versão 3.1.x.

Da autoria de Ryan Bates, a gem Nifty Generators, cria, entre outras coisas, um scaffold estilizado, muito útil para servir como base para uma aplicação.

Compatibilidade
A gem Nifty Generators ainda não está compatível com o Rails versão 3.1.x, então faremos alguns procedimentos temporários até que os dois estejam compatíveis.

II – Principais tecnologias usadas neste artigo

III – O que não precisamos instalar

IV – Sequência de passos para utilização

Passo 01 – Crie uma aplicação

$ rails new people
$ cd people

Passo 02 – Gemfile: adicione as gems necessárias

  • Ajuste seu arquivo Gemfile para que fique assim:
gem 'execjs'    # necessário para Linux
gem 'therubyracer'  # necessário para Linux

group :test do
  # Pretty printed test output
  gem 'turn', '0.8.2', :require => false
  gem "mocha"
end

group :development do
  gem "nifty-generators"
end

Passo 03 – Execute o bundle

$ bundle install

Passo 04 – Gere o layout e execute alguns comandos

$ rails generate nifty:layout
$ mv public/stylesheets/application.css app/assets/stylesheets
$ rm -r public/stylesheets/

Passo 05 – Ajuste seu arquivo de layout

Ajuste no seu arquivo app/views/layouts/application.html.erb para que fique com as linhas abaixo:

<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>

Passo 06 – Gere o scaffold com a gem Nifty Generators

$ rails generate nifty:scaffold person name:string
$ bundle exec rake db:migrate

Passo 07 – Ajuste as rotas para o controlador

No arquivo config/routes.rb adicione a linha abaixo

root :to => "people#index"

Passo 08 – Execute o servidor localmente

$ rm public/index.html
$ rails server

V – Final Feliz

Pronto!
Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.1.3 no Linux Ubuntu 11.10 com adaptações temporárias, usando a gem Nifty Generators.
Quando esta gem já estiver compatibilizada com versões do Rails 3.1.x não haverá mais necessidade de usar este passo a passo.

VI – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
(3) http://passbyvalue.com/2011/11/getting-started-with-heroku-and-rails-3-1/ 

Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2

I – Introdução

Neste post vamos mostrar os pontos mais importantes comumente usados ao iniciar um novo projeto em Ruby On Rails, mas agora de maneira mais específica, pois já falamos sobre este assunto anteriormente neste post: Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto.

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.2
  • Rails 3.1.3
  • RVM
  • BitBucket site de hosting de aplicações, onde vamos armazenar os fontes
  • Webbynode site onde vamos distribuir  (deployment) o app que vamos criar.

III – O que não precisamos instalar

IV – Sequência de passos para instalação

Passo 01 – Instalação do Ruby versão 1.9.2

  • Para verificar a versão atual acesse: http://www.ruby-lang.org/en/downloads/
  • Para verificar se a versão do Ruby 1.9.2 já está instalado em seu ambiente use:
    $ rvm list rubies
  • Para instalar o Ruby vamos usar o RVM, o gerenciador de versões Ruby, instalado anteriormente.

$ rvm install 1.9.2 (vai demorar)
$ rvm list
$ rvm use 1.9.2 (ou “rvm –default use 1.9.2” torna esta, a versão default neste ambiente)
$ rvm list
$ ruby –version (versão do Ruby que você está usando)

Passo 02 – Atualize Rake e RubyGems

$ rake –version (Para ver a versão do Rake. O Rake versão 0.9.2.2 vem com o Ruby 1.9.3)
$ gem update rake
$ rake –version

  • Agora vamos atualizar o RubyGems
  • O RubyGems é um gerenciador de pacotes padrão que vem como parte da instalação do Ruby.
  • Para verificar a versão atual acesse: http://rubygems.org/pages/download

$ gem –version (versão do RubyGem que você está usando. Deve ser versão 1.8.11 ou mais atual)
$ gem update –system
$ gem –version

Passo 03 – Crie e use um novo gemset para cada um de seus projetos

  • É uma boa idéia usar um gemset específico para cada um dos seus projetos, juntamente com o seu arquivo Gemfile específico.
  • Desta forma, apesar de você atualizar as gems de um “ProjectA” através da atualização para gems mais recentes, as mesmas gems não mudarão para o “ProjectB” – eliminando a possibilidade de interferência de gems, entre os projetos.

$ rvm list gemsets (para ver uma lista das versões de Ruby e gemsets instalados)
$ rvm gemset create gemset_myproject  (crie um gemset para este projeto)
$ rvm use ruby-1.9.2-p290@gemset_myproject
$ rvm list gemsets
$ ls -l ~/.rvm/gems/ruby-1.9.2-p290@gemset_myproject (para consultar as gems instaladas nesse novo gemset. Por enquanto deve estar vazio)
$ gem list –local (traz a mesma informação anterior)

Passo 04 – Instalação do Rails.

$ rails –version (Verifique versão do Rails. Vai retornar um erro: você ainda não instalou o Rails)
$ gem install rails –version 3.1.3 –no-rdoc –no-ri (ou “gem install rails”, instala a versão atual mais estável do Rails. Os parâmetros “–no-rdoc” e “–no-ri”, não instalam as documentações e são opcionais)
$ rails –version
$ ls -l ~/.rvm/gems/ruby-1.9.2-p290@gemset_myproject/gems (para consultar as gems instaladas nesse novo gemset. Agora não deve estar vazio)
$ gem list –local (traz a mesma informação anterior)

V – Criando uma aplicação

Itens específicos. 

  • Esta parte “V – Criando uma aplicação”, é específica por conta dos seguintes itens que estaremos usando:
    • Hospedagem dos fontes:  BitBucket (você deve ter uma conta aqui)
    • Hospedagem do site que estamos criando:  Webbynode (você deve ter uma conta aqui).
    • O banco de dados em ambiente de produção: PostgreSQL.
    • Web server em ambiente de desenvolvimento: Unicorn.
  • Você poderá seguir os passos abaixo, ou adaptá-los conforme sua necessidade.

Repositório para hospedar os fontes. 

  • Crie um repositório no site Bitbucket, que você abriu uma conta para hospedar os fontes.
  • Para seguir o exemplo o nome do respositório deverá ser “demo”.

Sequência de comandos. 

$ rails new demo
$ cd demo
$ gem install webbynode (gem da Webbynode para o deployment)
$ wn webbies  (consulte os lugares disponíveis na Webbynode – conhecidas como webbies)
$ webbynode init nome_da_webby  (nome_da_webby é o nome da webby escolhido anteriormente)

  • Acrescente as linhas abaixo no arquivo Gemfile da aplicação demo.

gem ‘execjs’    # necessário para Linux
gem ‘therubyracer’  # necessário para Linux
group :production do
gem ‘pg’
end
# Use unicorn as the web server
gem ‘unicorn’

  • Continuando, execute os comandos abaixo:

$ bundle install –without production
$ rails g scaffold user name:string age:integer
$ bundle exec rake db:migrate
$ bundle exec rake assets:precompile

  • Você lembra qual a gemset que estamos trabalhando ?
  • Para poupar o trabalho de ajustar a gemset e versão do Ruby cada vez que usar este projeto, podemos deixar que o próprio RVM ajuste isto para nós.
  • Para isto crie um arquivo na raiz do projeto, chamado “.rvmrc”
  • O conteúdo será:
    rvm use ruby-1.9.2-p290@gemset_myproject
  • Continuando, execute os comandos abaixo:

$ git init
$ git remote add demo https://seu_nome_usuario@bitbucket.org/seu_nome_usuario/demo.git
$ git status
$ git add .
$ git commit -am “created user model, controller, view”
$ git push demo master:master

$ wn push  # deployment para a Webbynode

Para ver o resultado localmente. 

$ bundle exec unicorn   # roda na porta 8080

  • Carregue o browser, e digite na linha de endereços:
    localhost:8080/users

Para ver o resultado em produção. 

VI – Final Feliz

Pronto!
Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.1.3 no Linux Ubuntu 11.10.
Agora a aplicação Demo,  funciona em seu browser, permitindo localmente, manipular registros de pessoas e consulta-las, e funciona na internet também, hospedado na Webbynode.

VII – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto 

Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto

Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto.

I – Introdução

Neste post vamos mostrar os pontos mais importantes comumente usados ao iniciar um novo projeto em Ruby On Rails.

Como dependemos de instalações e configurações anteriores, recomendamos analisar o post Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10 para garantir que o ambiente está preparado.

Vamos a sequência de comandos usando o terminal (prompt) do Linux.

II – Principais tecnologias usadas neste artigo

  • Linux Ubuntu 11.10
  • Ruby 1.9.3
  • Rails 3.1.3
  • RVM

III – O que não precisamos instalar

$ ls -l  ~/.rvm/rubies/ruby-1.9.3-p0/bin/

  • Outra verificação que pode ser feita.
  • Execute abaixo o comando “rvm list rubies” para ver uma lista das versões de Ruby instaladas.

$ rvm list rubies

IV – Sequência de passos para instalação

Passo 01 – Mude (use) para o ruby 1.9.3

  • Utilizando o gerenciador de versões Ruby, RVM, comece a usar agora o “ruby-1.9.3-p0”

$ rvm use ruby-1.9.3-p0

Passo 02 – Atualize Rake e RubyGems

$ rake –version (Para ver a versão do Rake. O Rake versão 0.9.2.2 vem com o Ruby 1.9.3)
$ gem update rake
$ rake –version

  • Agora vamos atualizar o RubyGems
  • O RubyGems é um gerenciador de pacotes padrão que vem como parte da instalação do Ruby.
  • Para verificar a versão atual acesse: http://rubygems.org/pages/download

$ gem –version (versão do RubyGem que você está usando. Deve ser versão 1.8.11 ou mais atual)
$ gem update –system
$ gem –version

Passo 03 – Crie e use um novo gemset para cada um de seus projetos

  • É uma boa idéia usar um gemset específico para cada um dos seus projetos, juntamente com o seu arquivo Gemfile específico.
  • Desta forma, apesar de você atualizar as gems de um “ProjectA” através da atualização para gems mais recentes, as mesmas gems não mudarão para o “ProjectB” – eliminando a possibilidade de interferência de gems, entre os projetos.

$ rvm list gemsets (para ver uma lista das versões de Ruby e gemsets instalados.
$ rvm gemset create gemset_myproject  (crie um gemset para este projeto)
$ rvm use ruby-1.9.3-p0@gemset_myproject
$ rvm list gemsets
$ ls -l ~/.rvm/gems/ruby-1.9.3-p0@gemset_myproject (para consultar as gems instaladas nesse novo gemset. Por enquanto deve estar vazio)
$ gem list –local (traz a mesma informação anterior. Aqui só deve mostrar o bundler)

Passo 04 – Instalação do Rails.

$ rails –version (Para verificar a versão do Rails)
$ gem install rails –version 3.1.3 –no-rdoc –no-ri (ou “gem install rails”, instala a versão atual mais estável do Rails. Os parâmetros “–no-rdoc” e “–no-ri”, não instalam as documentações e são opcionais)
$ rails –version
$ ls -l ~/.rvm/gems/ruby-1.9.3-p0@gemset_myproject/gems (para consultar as gems instaladas nesse novo gemset. Agora não deve estar vazio)
$ gem list –local (traz a mesma informação anterior)

V – Criando uma aplicação

$ cd ~
$ rails new people
$ cd people

  • Caso você esteja usando Linux, acrescente as linhas abaixo no arquivo Gemfile da aplicação People:

gem ‘execjs’
gem ‘therubyracer’

  • Execute os comandos abaixo:

$ bundle install
$ bundle list (para ter uma lista com as gems “empacotadas” no seu projeto)
$ rails generate scaffold person name:string
$ bundle exec rake db:migrate (*)
$ rails server

(*) Lembre-se, é uma boa prática executar “bundle exec rake …” em vez de simplesmente executar “rake …”.

  • Carregue o browser, e digite na linha de endereços:

localhost:3000/people

VI – Final Feliz

Pronto!
Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.1.3 no Linux Ubuntu 11.10.
Agora a aplicação People,  funciona em seu browser, permitindo localmente, manipular registros de pessoas e consulta-las.

VII – Referências

(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10