Wie konfiguriere ich Ruby so, dass pro Projekt das richtige Gemset oder die richtige Ruby-Version verwendet wird?

7

Ich öffne ein Terminal und navigiere zu meinem Projektordner (zB :) cd /proj/tickecting_app. Danach führe ich diesen Befehl aus : rvm use ruby 1.9.x@gemset.

Ich möchte, dass dieser Befehl jedes Mal ausgeführt wird, wenn ich das Terminal öffne.

Gibt es eine Möglichkeit, dies automatisch auszuführen? Um genauer zu sein, navigiere ich in separaten Registerkarten zu verschiedenen Projekten.

Zum Beispiel:

  • Erste Registerkarte cd /proj/tickecting_appund ausführen rvm use ruby 1.9.x@gemset.
  • Zweite Registerkarte cd /proj/rss_feed_appund ausführen rvm use ruby 2.1.x@gemset.

Ich möchte je nach Projekt unterschiedliche Befehle ausführen. Ist das möglich?

Sridhar
quelle
Diese Frage war früher nicht, wie man konfiguriertRuby
mikeserv

Antworten:

10

Wenn Sie RVM verwenden, müssen Sie lediglich eine Datei .rvmrcmit dem folgenden Inhalt in Ihr Projektverzeichnis einfügen:

rvm use ruby 1.9.x@gemset

Für Ihr zweites Projekt ist es dasselbe, ändern Sie einfach den rvmAufruf.

jabbrwcky
quelle
5
Vielen Dank, dass Sie versucht haben, das zugrunde liegende Problem des OP zu lösen.
Deer Hunter
@jabbrwcky hervorragend .... dafür sollte ein separates Abzeichen gegeben werden;)
Anfänger
Wenn ich mich richtig erinnere, .rvmrcist veraltet. Verwenden Sie .ruby-gemsetund .ruby-versionstattdessen.
Ajedi32
@ Ajedi32 Wenn ich die neue Version anstelle von .rvmrcverwende, wechsle ich nicht automatisch zum Gemset des Projekts. Habe das heute gerade herausgefunden. : /
Patrick
@ Pattulus Es tut für mich ...
Ajedi32
6

Aliase können für Sie von Nutzen sein. Sie können aliasfür jedes bestimmte Verzeichnis und den Befehl, den Sie ausführen müssen, erstellen . Für die beiden Beispiele, die Sie gegeben haben, wäre es also:

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'

Das nächste Mal müssen Sie also nur das geben alias(auch nicht geben cd), dh ticketappund feedappim obigen Fall.

Um Ihre Aliase dauerhaft zu machen, einfach:

vim ~ / .bashrc

und geben Sie diese Alias-Befehle so wie sie sind in der .bashrcDatei.

Anfänger
quelle
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 ~]$

So etwas sollte für ein POSIX-System funktionieren - obwohl ich denke, dass nur bashder \ backslash vor dem! Bang so erforderlich ist. bashscheint auch den Verlauf auf eine Weise zu aktualisieren, die nicht funktioniert fc- was portabel ist - aber funktioniert history. In anderen Shells sollte das history 1Bit austauschbar sein fc -l -1, bashaber es ist ein Befehl dahinter, denke ich. Es war ziemlich frustrierend.

Jedes Mal, wenn die Eingabeaufforderung gezeichnet wird, wird die Variable $last_histals Verlaufsnummer für den letzten Befehl definiert. Dies geschieht im Match-Feld bei einer Parametersubstitution, die immer gleich nichts ist, sodass sie nicht in der Eingabeaufforderung angezeigt wird.

Die fcÜberprüfung stellt nur sicher, dass die letzte Verlaufsnummer tatsächlich erhöht wurde - wie in, Sie haben nicht einfach die Eingabetaste gedrückt oder was auch immer. Es wird auch überprüft, ob der letzte Befehl a war cd. Wenn beide zutreffen, wird versucht, .eine Datei im aktuellen Verzeichnis mit dem Namen zu erstellen .dircmd. Wenn es existiert, läuft es. Wenn nicht, na ja.

mikeserv
quelle