SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Resolvendo problemas de Dependências com o




   Rodrigo Alves Vieira   rodrigo3n.com 
   rodrigo3n@gmail.com    @rodrigo3n
O que é o Bundler?
O que é o Bundler?
Gerenciador e Empacotador de Dependências
O que é o Bundler?
Gerenciador e Empacotador de Dependências


Convenção no Rails apartir da versão 3.0.0.beta1
O que é o Bundler?
Gerenciador e Empacotador de Dependências


Convenção no Rails apartir da versão 3.0.0.beta1



Criado por Yehuda Katz, Carl Lerche e Andre Arko
O que é o Bundler?
Gerenciador e Empacotador de Dependências


Convenção no Rails apartir da versão 3.0.0.beta1



Criado por Yehuda Katz, Carl Lerche e Andre Arko


Pensado pra servir pra qualquer projeto Ruby

      (E sobre qualquer interpretador)
Porquê Bundler?
Porquê Bundler?

Porque sua aplicação precisa de outras Gems
Porquê Bundler?

Porque sua aplicação precisa de outras Gems

Porque rake gems:install poderia alterar versões
Porquê Bundler?

Porque sua aplicação precisa de outras Gems

Porque rake gems:install poderia alterar versões

Porque você não quer perder tempo
Porquê Bundler?

Porque sua aplicação precisa de outras Gems

Porque rake gems:install poderia alterar versões

Porque você não quer perder tempo

Porque é muito fácil de usar e manter
Porquê Bundler?

Porque sua aplicação precisa de outras Gems

Porque rake gems:install poderia alterar versões

Porque você não quer perder tempo

Porque é muito fácil de usar e manter

Porque o antigo sistema de dependências é burro
 Gem::LoadError: can't activate rack (~> 1.0.0., runtime) for
["actionpack-2.3.5"], already activated rack-1.1.0 for ["thin-
1.2.7"]
 
WTF?!
Isso acontece quando numa
mesma aplicação você inclui
 duas Gems diferentes que
   dependem de versões
    divergentes de uma
 determinada/única Gem  
Solução do Bundler 
Solução do Bundler 
Resolver dependências antes de instalar
Solução do Bundler 
Resolver dependências antes de instalar

Lacrar as Gems após instalá-las
Solução do Bundler 
Resolver dependências antes de instalar

Lacrar as Gems após instalá-las

Te deixa usar gems direto de repositórios Git
Solução do Bundler 
Resolver dependências antes de instalar

Lacrar as Gems após instalá-las

Te deixa usar gems direto de repositórios Git

Adeus ao config/environment.rb do Rails 2.3!
Bem vindo,




  Gemfile
#Isso é um Gemfile
source 'http://rubygems.org'
#source :gemcutter ou source 'http:gems.meusite.com'
gem 'rails', '3.0.0.beta4'
gem 'sqlite3-ruby', :require => 'sqlite'
gem 'smart_model'

#Quer usar o Rails direto do repositório oficial?:
#gem 'rails', :git => 'git://github.com/rails/rails.git'

#Ou mesmo, quer usar o teu fork do Rails?:
#gem 'rails', :git => 'git://github.com/tu/rails.git'

#gem 'rails', :git =>
'git@github.com:rodrigo3n/rails.git'

#Ou também:
#gem 'rails', :path => '~/codigo/gems/rails'

#Tem muito mais por aí.... o/
Uma outra dica

gem 'funk', :git =>
'git@github.com:rodrigo3n/funk.git',
:branch => 'experimental'
O Bundler te deixa criar
  ambientes de Gems
O Bundler te deixa criar
      ambientes de Gems

(De uma maneira ainda mais flexível do
 que no antigo config/environments.rb)
group :development do
    gem 'sqlite3-ruby', :require => 'sqlite'
    gem 'unicorn'
end

group   :test do
  gem   'rspec-rails'
  gem   'cucumber-rails'
  gem   'launchy'
end

group :production do
  gem 'pg'
  gem 'passenger'
end
group :development do
    gem 'sqlite3-ruby', :require => 'sqlite'
    gem 'unicorn'
end

group   :test do
  gem   'rspec-rails'
  gem   'cucumber-rails'
  gem   'launchy'
end

group :production do
  gem 'pg'
  gem 'passenger'
end

    % bundle install --without production
Você pode também criar seus
próprios ambientes de Gems
group   :meugrupo do
  gem   'sinatra'
  gem   'heroku'
  gem   'eventmachine'
end
Lista de comandos do Bundler
    bundle   check
  bundle     console [grupo]
  bundle     exec
  bundle     help [tarefa]
  bundle     init
  bundle     install
  bundle     lock
  bundle     open [gem]
  bundle     package
  bundle     show [gem]
  bundle     unlock
  bundle     version
Rode $bundle no
    Terminal e veja essa
listagem de comandos com
      suas respectivas
         descrições
Algumas coisas que você precisa
    saber sobre o Bundler 
Algumas coisas que você precisa
      saber sobre o Bundler 

Sempre aponta pra as Gems que você já tem instaladas
Algumas coisas que você precisa
      saber sobre o Bundler 

Sempre aponta pra as Gems que você já tem instaladas

O $bundle install  instala as Gems no seu sistema
Algumas coisas que você precisa
      saber sobre o Bundler 

Sempre aponta pra as Gems que você já tem instaladas

O $bundle install  instala as Gems no seu sistema

O Bundler pede a senha do  $sudo  se for o caso
Algumas coisas que você precisa
      saber sobre o Bundler 

Sempre aponta pra as Gems que você já tem instaladas

O $bundle install  instala as Gems no seu sistema

O Bundler pede a senha do  $sudo  se for o caso

Travamento (locking) de Gems acontece automagicamente
Algumas coisas que você precisa
      saber sobre o Bundler 

Sempre aponta pra as Gems que você já tem instaladas

O $bundle install  instala as Gems no seu sistema

O Bundler pede a senha do  $sudo  se for o caso

Travamento (locking) de Gems acontece automagicamente

$bundle update atualiza versões  (Tenha cuidado!)
Há também uma opção pra usar diferentes
Gems em diferentes interpretadores Ruby
Há também uma opção pra usar diferentes
  Gems em diferentes interpretadores Ruby

platform :ruby, :rbx do
  gem 'sqlite3-ruby', :require => 'sqlite'
end

platform :jruby do
  gem 'activerecord-jdbc-adapter'
end
Há também uma opção pra usar diferentes
  Gems em diferentes interpretadores Ruby

platform :ruby, :rbx do
  gem 'sqlite3-ruby', :require => 'sqlite'
end

platform :jruby do
  gem 'activerecord-jdbc-adapter'
end

            Isso é especialmente útil quando
            você quer testar performance e
            comportamente do seu projeto Rails
Nem tudo no Bundler são unicórnios e twitter-sem-
fail-whale, alguns problemas já foram relatados
embora eu pessoalmente não tenha tido nenhum
(até o presente momento).

Visite http://github.com/carlhuda/bundler/issues
ou ruby-bundler no Google Groups ou #bundler no
Freenode. Sugestões, questões e reporte de Bugs
são bem vindos!

Alternativamente você pode me mandar um email
ou um tweet. Ou postar algo no Frevo on Rails ;-)
Quer saber mais é?

      http://gembundler.com

         Obrigado!
Rodrigo Alves Vieira   rodrigo3n.com 
rodrigo3n@gmail.com    @rodrigo3n

Weitere ähnliche Inhalte

Was ist angesagt?

Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasHelder da Rocha
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaHelder da Rocha
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 

Was ist angesagt? (7)

servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Sistemas Distribuídos - Multithreading
Sistemas Distribuídos - MultithreadingSistemas Distribuídos - Multithreading
Sistemas Distribuídos - Multithreading
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
Floggy-JustJava-2008-09-10
Floggy-JustJava-2008-09-10Floggy-JustJava-2008-09-10
Floggy-JustJava-2008-09-10
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 

Ähnlich wie Resolvendo Dependências com Bundler

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xRodrigo Urubatan
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalargustavomtborges
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsThiago Cifani
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Project HA
Project HAProject HA
Project HAKarpv
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael Gomes
 
Piores Práticas em Containers!
Piores Práticas em Containers!Piores Práticas em Containers!
Piores Práticas em Containers!Pery Lemke
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Wallison Marra
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 

Ähnlich wie Resolvendo Dependências com Bundler (20)

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.x
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Project HA
Project HAProject HA
Project HA
 
Asterisk
AsteriskAsterisk
Asterisk
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Docker selenium
Docker seleniumDocker selenium
Docker selenium
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
Piores Práticas em Containers!
Piores Práticas em Containers!Piores Práticas em Containers!
Piores Práticas em Containers!
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
RoR na prática
RoR na práticaRoR na prática
RoR na prática
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 

Resolvendo Dependências com Bundler

  • 1. Resolvendo problemas de Dependências com o Rodrigo Alves Vieira rodrigo3n.com  rodrigo3n@gmail.com @rodrigo3n
  • 2. O que é o Bundler?
  • 3. O que é o Bundler? Gerenciador e Empacotador de Dependências
  • 4. O que é o Bundler? Gerenciador e Empacotador de Dependências Convenção no Rails apartir da versão 3.0.0.beta1
  • 5. O que é o Bundler? Gerenciador e Empacotador de Dependências Convenção no Rails apartir da versão 3.0.0.beta1 Criado por Yehuda Katz, Carl Lerche e Andre Arko
  • 6. O que é o Bundler? Gerenciador e Empacotador de Dependências Convenção no Rails apartir da versão 3.0.0.beta1 Criado por Yehuda Katz, Carl Lerche e Andre Arko Pensado pra servir pra qualquer projeto Ruby (E sobre qualquer interpretador)
  • 8. Porquê Bundler? Porque sua aplicação precisa de outras Gems
  • 9. Porquê Bundler? Porque sua aplicação precisa de outras Gems Porque rake gems:install poderia alterar versões
  • 10. Porquê Bundler? Porque sua aplicação precisa de outras Gems Porque rake gems:install poderia alterar versões Porque você não quer perder tempo
  • 11. Porquê Bundler? Porque sua aplicação precisa de outras Gems Porque rake gems:install poderia alterar versões Porque você não quer perder tempo Porque é muito fácil de usar e manter
  • 12. Porquê Bundler? Porque sua aplicação precisa de outras Gems Porque rake gems:install poderia alterar versões Porque você não quer perder tempo Porque é muito fácil de usar e manter Porque o antigo sistema de dependências é burro
  • 13.
  • 15. WTF?!
  • 16. Isso acontece quando numa mesma aplicação você inclui duas Gems diferentes que dependem de versões divergentes de uma determinada/única Gem  
  • 17.
  • 19. Solução do Bundler  Resolver dependências antes de instalar
  • 20. Solução do Bundler  Resolver dependências antes de instalar Lacrar as Gems após instalá-las
  • 21. Solução do Bundler  Resolver dependências antes de instalar Lacrar as Gems após instalá-las Te deixa usar gems direto de repositórios Git
  • 22. Solução do Bundler  Resolver dependências antes de instalar Lacrar as Gems após instalá-las Te deixa usar gems direto de repositórios Git Adeus ao config/environment.rb do Rails 2.3!
  • 23. Bem vindo, Gemfile
  • 24. #Isso é um Gemfile source 'http://rubygems.org' #source :gemcutter ou source 'http:gems.meusite.com' gem 'rails', '3.0.0.beta4' gem 'sqlite3-ruby', :require => 'sqlite' gem 'smart_model' #Quer usar o Rails direto do repositório oficial?: #gem 'rails', :git => 'git://github.com/rails/rails.git' #Ou mesmo, quer usar o teu fork do Rails?: #gem 'rails', :git => 'git://github.com/tu/rails.git' #gem 'rails', :git => 'git@github.com:rodrigo3n/rails.git' #Ou também: #gem 'rails', :path => '~/codigo/gems/rails' #Tem muito mais por aí.... o/
  • 25.
  • 26. Uma outra dica gem 'funk', :git => 'git@github.com:rodrigo3n/funk.git', :branch => 'experimental'
  • 27. O Bundler te deixa criar ambientes de Gems
  • 28. O Bundler te deixa criar ambientes de Gems (De uma maneira ainda mais flexível do que no antigo config/environments.rb)
  • 29. group :development do gem 'sqlite3-ruby', :require => 'sqlite' gem 'unicorn' end group :test do gem 'rspec-rails' gem 'cucumber-rails' gem 'launchy' end group :production do gem 'pg' gem 'passenger' end
  • 30. group :development do gem 'sqlite3-ruby', :require => 'sqlite' gem 'unicorn' end group :test do gem 'rspec-rails' gem 'cucumber-rails' gem 'launchy' end group :production do gem 'pg' gem 'passenger' end % bundle install --without production
  • 31. Você pode também criar seus próprios ambientes de Gems
  • 32.
  • 33. group :meugrupo do gem 'sinatra' gem 'heroku' gem 'eventmachine' end
  • 34. Lista de comandos do Bundler    bundle check bundle console [grupo] bundle exec bundle help [tarefa] bundle init bundle install bundle lock bundle open [gem] bundle package bundle show [gem] bundle unlock bundle version
  • 35. Rode $bundle no Terminal e veja essa listagem de comandos com suas respectivas descrições
  • 36. Algumas coisas que você precisa saber sobre o Bundler 
  • 37. Algumas coisas que você precisa saber sobre o Bundler  Sempre aponta pra as Gems que você já tem instaladas
  • 38. Algumas coisas que você precisa saber sobre o Bundler  Sempre aponta pra as Gems que você já tem instaladas O $bundle install  instala as Gems no seu sistema
  • 39. Algumas coisas que você precisa saber sobre o Bundler  Sempre aponta pra as Gems que você já tem instaladas O $bundle install  instala as Gems no seu sistema O Bundler pede a senha do  $sudo  se for o caso
  • 40. Algumas coisas que você precisa saber sobre o Bundler  Sempre aponta pra as Gems que você já tem instaladas O $bundle install  instala as Gems no seu sistema O Bundler pede a senha do  $sudo  se for o caso Travamento (locking) de Gems acontece automagicamente
  • 41. Algumas coisas que você precisa saber sobre o Bundler  Sempre aponta pra as Gems que você já tem instaladas O $bundle install  instala as Gems no seu sistema O Bundler pede a senha do  $sudo  se for o caso Travamento (locking) de Gems acontece automagicamente $bundle update atualiza versões  (Tenha cuidado!)
  • 42. Há também uma opção pra usar diferentes Gems em diferentes interpretadores Ruby
  • 43. Há também uma opção pra usar diferentes Gems em diferentes interpretadores Ruby platform :ruby, :rbx do gem 'sqlite3-ruby', :require => 'sqlite' end platform :jruby do gem 'activerecord-jdbc-adapter' end
  • 44. Há também uma opção pra usar diferentes Gems em diferentes interpretadores Ruby platform :ruby, :rbx do gem 'sqlite3-ruby', :require => 'sqlite' end platform :jruby do gem 'activerecord-jdbc-adapter' end Isso é especialmente útil quando você quer testar performance e comportamente do seu projeto Rails
  • 45. Nem tudo no Bundler são unicórnios e twitter-sem- fail-whale, alguns problemas já foram relatados embora eu pessoalmente não tenha tido nenhum (até o presente momento). Visite http://github.com/carlhuda/bundler/issues ou ruby-bundler no Google Groups ou #bundler no Freenode. Sugestões, questões e reporte de Bugs são bem vindos! Alternativamente você pode me mandar um email ou um tweet. Ou postar algo no Frevo on Rails ;-)
  • 46.
  • 47. Quer saber mais é? http://gembundler.com Obrigado! Rodrigo Alves Vieira rodrigo3n.com  rodrigo3n@gmail.com @rodrigo3n