Como configurar o Ruby para usar a versão correta do gemset ou Ruby por projeto?

7

Eu abro um terminal e navego para a pasta do meu projeto (ex: cd /proj/tickecting_app ). Depois disso eu executo este comando: rvm use ruby 1.9.x@gemset .

Eu quero que este comando rode isso toda vez que eu abrir o terminal.

Existe uma maneira de executar isso automaticamente? E, para ser mais específico, navego para diferentes projetos em separadores separados.

Por exemplo:

  • Primeira guia cd /proj/tickecting_app e executar rvm use ruby 1.9.x@gemset .
  • Segunda guia cd /proj/rss_feed_app e execução rvm use ruby 2.1.x@gemset .

Eu quero executar comandos diferentes dependendo do projeto. Isso é possível?

    
por Sridhar 05.09.2014 / 07:32

3 respostas

10

Se você estiver usando o RVM, será apenas uma questão de colocar um arquivo chamado .rvmrc em seu diretório de projeto com o seguinte conteúdo:

rvm use ruby 1.9.x@gemset

Para o seu segundo projeto, é o mesmo, apenas altere a invocação rvm .

    
por 05.09.2014 / 09:07
6

Aliases podem ser úteis para você. Você pode criar alias para cada diretório específico e o comando que você precisa executar. Então, para os dois exemplos que você deu, seria:

alias ticketapp='cd /proj/tickecting_app && rvm use ruby 1.9.x@gemset'

alias feedapp='cd /proj/rss_feed_app && rvm use ruby 2.1.x@gemset'

Então, da próxima vez você só precisa dar o alias (não é necessário dar cd ), ou seja,ticketapp e feedapp no caso acima.

Para tornar seus aliases permanentes, simplesmente:

vim ~/.bashrc

e forneça esses comandos de alias como estão no arquivo .bashrc .

    
por 05.09.2014 / 08:00
3
[mikeserv@localhost ~]$ PS1=$PS1'$(
    [ ${last_hist=\!} -ne \! ] && {
    h=$(history 1)
    [ -n "${h#"${h##* cd *}"}" ] &&    
    . ./.dircmd >&2 2>/dev/null        
})${0##*["$0"$((last_hist=\!))]*}'
[mikeserv@localhost ~]$ cd .
[mikeserv@localhost ~]$ 
[mikeserv@localhost ~]$ echo

[mikeserv@localhost ~]$ cat <<\DIRCMD >.dircmd
echo this is my home directory
> DIRCMD
[mikeserv@localhost ~]$ 
[mikeserv@localhost ~]$ echo

[mikeserv@localhost ~]$ cd .
this is my home directory
[mikeserv@localhost ~]$

Algo assim deve funcionar para um sistema POSIX - embora eu ache que apenas bash requeira a barra invertida antes do "! bang" assim. bash também parece atualizar o histórico de uma forma que não funciona com fc - que é portátil - mas funciona com history . Em outros shells, o history 1 bit deve ser permutável com fc -l -1 , mas bash faz um comando por trás, eu acho. Foi muito frustrante.

De qualquer forma, toda vez que o prompt é desenhado, ele define a variável $last_hist como o número do histórico do último comando. Ele faz isso no campo de correspondência em uma substituição de parâmetro que sempre será igual a nada, de modo que não apareça no prompt.

O fc check apenas garante que o último número do histórico realmente foi incrementado - como em, você não apenas pressionou enter ou o que quer que seja. Ele também verifica se o último comando foi um cd . Se ambos forem verdadeiros, ele tentará . fornecer um arquivo no diretório atual denominado .dircmd . Se existir, corre. Se não, tudo bem.

    
por 05.09.2014 / 08:00

Tags