Mina: trabalhando com rbenv / rvm etc?

Criado em 11 jun. 2012  ·  28Comentários  ·  Fonte: mina-deploy/mina

Oi,

Estou tentando implantar em um servidor onde o Ruby está instalado usando rbenv para o usuário de implantação. No entanto, Mina não parece perceber:

bundle install --without development:test --path "./vendor/bundle" --binstubs bin/ --deployment
bash: line 77: bundle: command not found

Eu nunca tenho certeza que o init arquivo é executado no login ssh - Eu tentei adicionar os necessários export PATH=... declarações à .bashrc , .bash_profile e .profile nenhum dos quais parecia ajudar. Também tentei configurar PATH manualmente na tarefa de implantação:

# ...
queue 'export PATH=$HOME/.rbenv/bin:$HOME/.rbenv/shims'
queue 'echo "path=$PATH"' # this doesn't include the paths above :(
invoke :'bundle:install'
# ...

sem sucesso (presumo que cada tarefa seja executada em um subshell, talvez?)

Algum conselho sobre como fazer essa configuração funcionar?

Obrigado!

Comentários muito úteis

Colocar queue "rvm rvmrc load" no nível de tarefa não funcionou para mim usando RVM. No entanto, simplesmente adicionei o seguinte ao meu .bashrc pois agora ele está carregado e funciona bem:

source "$HOME/.rvm/scripts/rvm"

Claro que seria bom tê-lo integrado no Mina, mas não tenho certeza de como seria difícil, já que você tem diferentes tipos de instalações (em todo o sistema / usuário) - não tenho certeza se existe uma maneira universal de carregá-lo. Mas, obtê-lo você mesmo de .bashrc funciona bem, visto que Mina o obtém. Não sou um especialista em RVM, então pode haver uma maneira conveniente / universal de carregar o RVM (ou as implementações Ruby).

Todos 28 comentários

Hum.

Vou lançar uma correção para fazer com que os comandos bash leiam .bashrc . Isso significa simplesmente passar -i para qualquer momento que Mina tentar invocar o Bash, e eu acho que é um padrão sensato.

Você está correto que cada comando de implantação enfileirado é executado em seu próprio subshell, você pode tentar fazer mina deploy --simulate para ver. No entanto, você pode fazer:

task :deploy do
  queue "export ..."
  deploy do
    # ...
    # deploy stuff here
  end
end

..e será chamado fora do script de implantação (não em um subshell).

Parece bom - obrigado! Adicionar a instrução export no nível da tarefa funcionou.

v0.1.2 agora deve respeitar .bashrc por padrão.

Também introduzi uma configuração relevante bash_options que você pode ver aqui .

Eu gostaria de implementar uma melhor integração RVM no futuro. O exemplo @ledbettj citado foi para rbenv (que, a propósito, não será necessário no 0.1.2+), mas para RVM é queue "rvm rvmrc load" .

@ledbettj gem install mina --pre (v0.1.2.pre1) - divirta-se.

Colocar queue "rvm rvmrc load" no nível de tarefa não funcionou para mim usando RVM. No entanto, simplesmente adicionei o seguinte ao meu .bashrc pois agora ele está carregado e funciona bem:

source "$HOME/.rvm/scripts/rvm"

Claro que seria bom tê-lo integrado no Mina, mas não tenho certeza de como seria difícil, já que você tem diferentes tipos de instalações (em todo o sistema / usuário) - não tenho certeza se existe uma maneira universal de carregá-lo. Mas, obtê-lo você mesmo de .bashrc funciona bem, visto que Mina o obtém. Não sou um especialista em RVM, então pode haver uma maneira conveniente / universal de carregar o RVM (ou as implementações Ruby).

@meskyanichi obrigado pelo comentário lá, consertou meus problemas. Seria bom se a mina suportasse o rvm como o capistrano. Mantenha o bom trabalho!

@ianmurrays no prob!

Eu realmente amo Mina ..... é super rápido e super simples, mas
Ainda estou recebendo este erro
bash: linha 60: pacote: comando não encontrado
Por favor me ajude

o caminho do meu rvm é "/ usr / local / rvm / bin"

adicionei as linhas abaixo a ~ / .bashrc
fonte "/ usr / local / rvm / bin"
e adicionei as linhas abaixo ao meu deploy.rb

@perumal Mina abre uma conexão pseudo-tty ( ssh -t ... ), portanto, certifique-se de que está fornecendo todos os seus itens (rvm, etc.) para o seu shell de maneira adequada. .bashrc é carregado para shells interativos sem login.

O problema acima desapareceu após alguns ajustes, mas recebi o seguinte erro
Quando executado como usuário 'implantar'

  tput: No value for $TERM and no -T specified
  tput: No value for $TERM and no -T specified
  ERRRO: Gem bundler is not installed, run `gem install bundler` first.
   !     ERROR: Deploy failed.

Mas quando executado como 'root'

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly
   !     ERROR: Deploy failed.

Isso faz parte do meu código deploy.rb

  task :env      do                                                                                                                                                                                                
    queue %{
      echo "-----> Loading environment"
      #{echo_cmd %[source ~/.bashrc]}
    }
  end

  desc "Deploys the current version to the server."
  task :afterdeploy do
    queue "export PATH=$PATH:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:/usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle"
    queue 'source "/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin"'
    queue "rvm rvmrc load"
    invoke :env
    deploy do
      # Put things that will set up an empty directory into a fully set-up
      # instance of your project.
      invoke :'git:clone'
      invoke :'bundle:install'
      #invoke :'rails:db_migrate'
      #invoke :'rails:assets_precompile'

      to :launch do
    #queue 'touch tmp/restart.txt'
      end
    end
  end  

Assumindo que você configurou sua máquina como a maioria das pessoas faz, você não será capaz de fazer o ssh diretamente como root (nem deveria ou mesmo precisar). Portanto, essa segunda resposta não é grande coisa. De qualquer forma, você pode apagar quaisquer detalhes privados (se houver algum lá) de seus dotfiles (na verdade, apenas ~/.bashrc ) e jogá-los como um ponto principal para que eu possa dar uma olhada e ver o que está acontecendo?

Você realmente não deveria se preocupar em invocar detalhes de ambiente como esses de seus scripts - pode ser ruim o suficiente em geral, mas se torna realmente insustentável quando você está lidando com uma equipe e / ou vários servidores.

Oi bluestrike,

desculpe por fazer esta pergunta básica, mas eu não sou um especialista em ubuntu

estou recebendo o seguinte erro

deploy<strong i="8">@peru</strong>:~$ ~/.bashrc
-bash: /home/deploy/.bashrc: Permission denied
deploy<strong i="9">@peru</strong>:~$ sudo ~/.bashrc
[sudo] password for deploy: 
sudo: /home/deploy/.bashrc: command not found

@perumal se você deseja executar seu bashrc, tente source ~/.bashrc .

Mas @ bluestrike2 está esperando que você cole o conteúdo do arquivo nele (ou seja, abra-o em um editor de texto e copie o conteúdo para http://gist.github.com). Use para esfregar quaisquer detalhes pessoais, se houver, como ele disse.

De qualquer forma: já tive um problema semelhante antes e arriscaria adivinhar que esta é uma instalação RVM multiusuário . Você instalou o RVM com sudo ? Quando você digita which rvm , diz /usr/local/bin/rvm ?

Nesse caso, você está executando uma instalação RVM multiusuário em todo o sistema. A melhor solução _provavelmente_ é carregar o ambiente RVM manualmente:

  task :env do                                                                                                                                                                                                
    queue %{
      echo "-----> Loading environment"
      #{echo_cmd %[source "/usr/local/rvm/environments/ruby-1.9.3-p135@gemset"]}
    }
  end

Ignore este conselho se não estiver usando uma instalação RVM multiusuário.

Oi rstacruz,

Você está certo, estou usando a instalação RVM multiusuário. Confirmei isso executando o seguinte comando
deploy @ peru : ~ $ which rvm
/ usr / local / rvm / bin / rvm

Mas quando cansei sua tarefa acima: env code, recebi este erro
deploy @ peru : ~ $ source "/usr/local/rvm/environments/ruby-1.9. 3-p135 @ gemset "
-bash: /usr/local/rvm/environments/ruby-1.9. 3-p135 @ gemset : Esse arquivo ou diretório não

Aqui está meu código deploy.rb
https://gist.github.com/3129672

meu comando $ rvm info mostra as seguintes informações

rvm:
    version:      "rvm 1.10.2 by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.beginrescueend.com/]"
    updated:      "4 months 23 days 7 hours 3 minutes 20 seconds ago"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.3p125"
    date:         "2012-02-16"
    platform:     "i686-linux"
    patchlevel:   "2012-02-16 revision 34643"
    full_version: "ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]"

  homes:
    gem:          "/usr/local/rvm/gems/ruby-1.9.3-p125"
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.3-p125"

  binaries:
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby"
    irb:          "/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/irb"
    gem:          "/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/gem"
    rake:         "/usr/local/rvm/gems/ruby-1.9.3-p125/bin/rake"

  environment:
    PATH:         "/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
    GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.3-p125"
    GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.3-p125:/usr/local/rvm/gems/ruby-1.9.3-p125@global"
    MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-1.9.3-p125"
    IRBRC:        "/usr/local/rvm/rubies/ruby-1.9.3-p125/.irbrc"
    RUBYOPT:      ""
    gemset:       ""

Além disso, oriente-me sobre como evitar a instalação de RVM multiusuário.
Qual é a maneira certa de instalar para evitar esses problemas no futuro.
Obrigada.

Altere o: ruby-1.9.3-p135@gemset ... para ser o ambiente RVM real que você deseja usar

Estou perdendo algo crucial aqui? @rstacruz implementou a habilidade de definir opções bash por meio de :bash_options , correto? O valor padrão para esta configuração é -i , o que significa que o shell é interativo.

Embora esta configuração seja aplicada, a execução de mina deploy resulta em ~/.bashrc sendo lido e retornado imediatamente devido ao seguinte.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Por que o shell executado não está sendo executado interativamente como seria de se esperar?

Provavelmente estou faltando alguma coisa aqui, então adoraria se alguém pudesse esclarecer esse problema.

@KevinSjoberg A solução fácil agora é colocar a invocação RVM em seu .bashrc em cima do cheque $PS1 você colou.

De qualquer forma, reabrindo porque quero que o suporte rbenv / rvm explícito seja implementado. Esse é um obstáculo comum que as pessoas enfrentam e quero que a experiência seja a mais tranquila possível.

+1 para reabrir esta edição.
É bom saber que esta edição foi reaberta porque amo a mina e sua simplicidade. Resolver esse único problema ajudaria muitos, inclusive eu.
Obrigado @rstacruz

Ainda não funciona!

Mesmo problema ...

Se eu descomentar a linha invoke :'rbenv:load' em config/deploy.rb , recebo este erro:

-----> Loading rbenv
       $ export PATH="/usr/local/rbenv/bin/rbenv/bin:$PATH"
 !     rbenv not found
 !     If rbenv is installed, check your :rbenv_path setting.

 !     Command failed.
       Failed with status 1
vagrant@vagrant-ubuntu-saucy-64:~$  if ! which rbenv >/dev/null; then echo "! rbenv not found"; echo "! If rbenv is installed, check your :rbenv_path setting."; exit 1; fi
vagrant@vagrant-ubuntu-saucy-64:~$ 

ou seja, o rbenv está instalado e funcionando ...

Mas se eu deixar a linha comentada (ou seja, # invoke :'rbenv:load )

Se eu logar na caixa do Vagrant e executar o mina deploy --trace , acontece o seguinte:

    $ bundle install --without development:test --path "./vendor/bundle" --binstubs bin/ --deployment
       bash: line 97: bundle: command not found
 !     ERROR: Deploy failed.

Problema semelhante, no Ubuntu 12.04 ...

 # ruby.deploy
  ...
  require 'mina/rbenv' 
  ...
  task :environment do
     invoke :'rbenv:load' 
  end
  ...

... resulta na seguinte falha:

-----> Installing gem dependencies using Bundler
       $ mkdir -p "/srv/www/app1/shared/bundle" 
       $ mkdir -p "./vendor" 
       $ ln -s "/srv/www/app1/shared/bundle" "./vendor/bundle" 
       $ bundle install --without development:test --pat       sh: 94: bundle: not found
       $ bundle install --without development:test --path "./vendor/bundle" --binstubs bin/ --deployment

Considerando que, conectado como o mesmo usuário, posso executar o comando problemático manualmente:

bundle install --without development:test --path "./vendor/bundle" --binstubs bin/ --deployment

Tente mudar o shell do usuário SSH para bash

chsh -s /bin/bash your_user

Ainda é um problema aqui! Ubuntu 14.
Ahh:
empacotador de instalação de gem
resolveu o problema na verdade

Olá,

Acabei de começar a usar o Mina e não estou usando rbenv nem RVM no momento.

Acredito que tenha havido algum tipo de regressão aqui porque tenho o mesmo problema inicial desse thread: meu bashrc não é levado em consideração. As cláusulas de exportação também o corrigiram.

Obrigado!

Editar: também não está carregando etc / perfil.

Esta página foi útil?
0 / 5 - 0 avaliações