Como o título já diz: O que você acha de gerar um executável da sua aplicação Ruby On Rails para fazer um demo ou apresentar para um cliente?
Pois é, acabei de descobrir que isto é possível
Para isto vamos precisar das seguintes ferramentas:
Para instalar ambos, basta executar os comandos:
$sudo gem install tar2rubyscript $sudo gem install rubyscript2exe
Para começar, vamos criar uma aplicação RoR, mas para poder carregar tudo junto com o executável, vamos utilizar o banco de dados SQLite.
$rails demo $cd demo $ruby script/server
Acesse com o browser o endereço: http://localhost:3000/ para garantir que esta tudo OK.
$irb
irb(main):005:0> require 'sqlite3'
irb(main):006:0> SQLite3::Database.new("demo_dev.db").execute(
irb(main):007:1* "create table books (id integer primary key, \
irb(main):008:1" title varchar(255), \
irb(main):009:1" author varchar(255));")
E copiaremos o banco criado para as bases de produção e testes:
$cp demo_dev.db demo_test.db $cp demo_dev.db demo_prod.db
$vi config/database.yml
Substituimos o conteúdo com algo parecido com isto:
development: adapter: sqlite3 database: demo_dev.db test: adapter: sqlite3 database: demo_tst.db production: adapter: sqlite3 database: demo_prd.db
Criamos o model e o controller:
$script/generate model Book $script/generate controller Book $vim app/controllers/book_controller.rb
E alteramos o código para algo parecido com isto:
class BookController < ApplicationController scaffold :book end
$script/server
Acesse com o browser o endereço http://localhost:3000/book para ver se esta tudo OK.
Agora a parte nova (fala sério, até o meu gato já sabe criar um CRUD com scaffold
)
O comando Tar2RubyScript cria um pacote para a aplicação, mas quando executado, ele descompacta tudo em um diretório temporário e no final da execução ele limpa o diretório, o que não é exatamente o comportamento esperado, então vamos mover os dados para um local seguro antes da execução …
$vi config.environment.rb
E vamos adicionar o seguinte código no inicio do arquivo:
module Rails
class Configuration
def database_configuration
conf = YAML::load(ERB.new(IO.read(database_configuration_file)).result)
if defined?(TAR2RUBYSCRIPT)
conf.each do |k, v|
if v["adapter"] =~ /^sqlite3/
v["database"] = oldlocation(v["database"]) if v.include?("database")
v["dbfile"] = oldlocation(v["dbfile"]) if v.include?("dbfile")
end
end
end
conf
end
end
end
Isto vai alterar a forma como o rails encontra o banco de dados, que originalmente estava definido assim:
module Rails
class Configuration
def database_configuration
YAML::load(ERB.new(IO.read(database_configuration_file)).result)
end
end
end
O que exatamente foi feito? quando executado um RBA precisa tratar dois diretórios diferentes: o diretório onde aplicação esta sendo executada, e o diretório onde a aplicação esta realmente ( referenciado como oldlocation), o código apresentado altera as configurações do database.yml colocando o caminho completo para o banco de dados e não apenas o nome do arquivo como seria utilizado em uma aplicação normal.
O Tar2RubScript precisa também de um arquivo chamado init.rb que sera o ponto de partida da aplicação, vamos cria-lo com o seguinte conteúdo:
$vi init.rb
at_exit do require "irb" require "drb/acl" require "sqlite3" end load "script/server"
Os ‘require’ adicionados são para facilitar a detecção de quais bibliotecas o programa utiliza, ja que o Rails carrega algumas delas apenas durante a execução do sistema, assim o Tar2RubyScript vai poder incluir estas bibliotecas também no executável gerado.
Agora vamos finalmente empacotar a aplicação:
$cd .. $tar2rubyscript demo $cp demo/demo_* .
Prontinho, ja podemos testar o nosso Ruby Archive
$ruby demo.rb
Pode acessar novamente a aplicação pela URL: http://localhost:3000/book
Criando um executável para levar para o cliente
Criar o executável não é nada complicado, basta executar o comando:
$rubyscript2exe demo.rb
Depois que o rails inicializar, precione CTRL+C e sera criado um executável de nome demo.exe, ou demo_linux no linux que é o meu caso.
Basta copiar o executável e os arquivos de banco de dados para o
Não será necessário chegar no cliente e instalar Ruby, RubyGems, Rails, outros Gems, …
Apenas um executável e alguns arquivos de bancos de dados no seu pendrive e esta tudo pronto para o demo
O que você quer melhor que isto?
Na verdade a única coisa que faltou para mim, foi a possibilidade de no linux gerar um executável windows para facilitar os demos, mas mesmo assim, ja esta mais do que bom
PS.: tirei este passo a passo desta URL, eu fiz alguns ajustes no código e traduzi o texto, o maior ajuste foi a utilização de sqlite3
Existe outra opção que também pode ser interessante se você quiser não apenas demonstrar para o cliente durante o desenvolvimento, mas se seu cliente precisar de uma aplicação verdadeiramente offline. É o Joyent Slingshot. Recomendo darem uma olhada neste “link”:http://www.treinatom.com.br/betaEventos/maratona/18082008/7.html
[Translate]
O SlingHost é bem legal mesmo
li sobre ele, vou fazer alguns testes para ver no que da
[Translate]
[...] “O que você acha de gerar um executável da sua aplicação Ruby On Rails para fazer um demo ou apre…“: O Rodrigo Urubatan compartilha sua descoberta de duas ferramentas interessantes para Rails. Uma alternativa para o Joyent. [...]
[Translate]
Prezados amigos,
eu tenho uma pequena aplicação em Ruby, a qual gostaria de transformar em executável do windows para fazer uma demonstração. Não usa banco de dados ou coisa parecida, é puro Ruby.
Eu tenho a gem rubyscript2exe e dou o comando “rubyscript2exe aplicação.rb”
Ele cria o executável e, quando clico nele, me dá mensagem de que falta libglib.dll e não abre.
O que estou fazendo de errado?
[Translate]
bahh, eu só testei no linux …
mas provavelmente isto qer dizer que tu esta utilizando os bindings de ruby para GTK, por tanto as dlls do GTK tem que estar no PATH para a tua aplicação funcionar …
[Translate]
Bom dia, Urubatan!
Obrigado pela resposta. Vou copiar as dll do GTK2 para a pasta onde coloco os aplicativos e tentar ver se o rubyscript2exe rastreia essas dlls e cria o executável corretamente.
Meu aplicativo com interface gráfica usando o WXRuby não deu problema algum; de forma que eu nem sei quais são as dll dele e se ele possui, hehehehe. É uma gema para o Ruby que testei para ver como ficava, em relação ao GTK2.
Se alguém kiser ver a aparência depois, eu posso enviar o arquivo de alguma forma.
Abraço e obrigado novamente!
[Translate]
Po cara ve se pode me ajudar , eu nao estou consequindo ver seu codigo aqui no forum tem uma parte ali do enviroment
por favor poste denovo se possivel ou mande um email com o codigo ,ha e cara eu nao entendo muito de linux só o basico mesmo
masi me esplica umas coisas !! eu estou trabalhando com windows, entao eu tenho um workspace com meu projeto , entao
quero saber como posso fazer esses comandos
“cmd”
c:\ruby> tar2rubyscript “ProjectNAME”
c:\ruby> rubyscript2exe “ProjectNAME”
bom na parte do banco como faço para botar ele no pendriver
pode disponibilizar algum link pra downloads ou algum exemplo para meu caso?
Atenciosamente Rodolfo Sá
[Translate]
como assim não esta conseguindo ver o código?
não entendi o que você quiz dizer com cmd, e tirando o sinal de “$” e o editor de código que usei (o vi) nada ali esta preso ao linux, tu pode usar o notepad se quiser no lugar do VI.
[Translate]
Opa tudo bem po estou com outra duvida,
aonde eu crio o arquivo $vi init.rb
[Translate]
vi é o editor de textos como eu ja disse, e init.rb é um arquivo que você cria com o conteúdo que eu mostrei …
[Translate]
Uruba estou com uma duvida no sqlite3 , po baixei uma versão aqui que ele mapea meus banco de dados na maquina local,
no caso quero criar um banco de fique no pendriver pra ir junto com a aplicação,
será que no seu exemplo ficou desse jeito? ou vc realmente consequiu criar um banco de dados dentro do pendriver e consequiu transportar para outros lugares
[Translate]
No exemplo o que é feito é carregar o banco no pendrive, quando a aplicação é inicializada ela copia para um diretório temporário, e no final da execução ele copia o banco alterado de volta para o pendrive.
Por tanto se cair a luz durante a execução da aplicação os dados serão perdidos
Mas sim o banco de dados é carregado junto com a aplicação.
[Translate]
vocês não podem esquecer de utilizar a aplicação quando o exe está sendo gerado, pois é nesse momento que o programa vai saber todas as libs que ele deve empacotar, somente depois de fazer um tur completo pelo seu sistema, que deve apertar ctrl+c
abs
[Translate]