如何配置 Ruby 以在每个项目的基础上使用正确的 gemset 或 Ruby 版本?

如何配置 Ruby 以在每个项目的基础上使用正确的 gemset 或 Ruby 版本?

我打开终端并导航到我的项目文件夹(例如cd /proj/tickecting_app:)。之后我执行这个命令:rvm use ruby 1.9.x@gemset

我希望每次打开终端时都运行此命令。

有没有办法自动运行这个?更具体地说,我在单独的选项卡中导航到不同的项目。

例如:

  • 第一个选项卡cd /proj/tickecting_app并运行rvm use ruby 1.9.x@gemset
  • 第二个选项卡cd /proj/rss_feed_app并运行rvm use ruby 2.1.x@gemset

我想根据项目运行不同的命令。这可能吗?

答案1

.rvmrc如果您使用 RVM,那么只需在项目目录中放置一个名为以下内​​容的文件即可:

rvm use ruby 1.9.x@gemset

对于您的第二个项目,它是相同的,只需更改调用即可rvm

答案2

别名可能对您有用。您可以alias为每个特定目录和需要运行的命令创建。因此,对于您给出的两个示例,它将是:

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'

所以下次你只需要给出alias(也不需要给出cd) ieticketappfeedapp在上面的情况下。

要使您的别名永久存在,只需:

vim ~/.bashrc

并按原样在.bashrc文件中给出这些别名命令。

答案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 ~]$

类似的东西应该适用于 POSIX 系统 - 尽管我认为只bash需要像这样的 !bang 之前的 \ 反斜杠。bash似乎也以一种不适用的方式更新历史记录fc- 这是可移植的 - 但确实适用于history.在其他 shell 中,该history 1位应该可以互换,fc -l -1bash我猜它是后面的命令。这真是令人沮丧。

无论如何,每次绘制提示时,都会将变量定义$last_hist为最后一个命令的历史编号。它在参数替换的匹配字段中执行此操作,该参数替换始终不等于任何内容,因此不会在提示中显示。

检查fc只是确保最后的历史记录数字实际增加 - 例如,您不只是按回车键或其他什么。它还检查最后一个命令是否是cd.如果两者都为 true,它将尝试.在当前目录中获取名为 的文件.dircmd。如果存在则运行。如果没有,哦,好吧。

相关内容