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!
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.
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: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).