[emacs][ruby] Emacs から rbenv で入れた ruby を呼び出せない

  • Terminal で「which ruby」すると「/Users/gan2/.rbenv/shims/ruby」と表示される。
  • Emacs で「M-! which ruby」すると「/usr/bin/ruby」と表示される。

前からこの違いを何とかしたいと思っていた。お願いだから Emacs でも rbenv の方を見に行って下さい。


PATH があやしいので確かめてみる。

  • Terminal で「echo $PATH」すると「/Users/gan2/.rbenv/shims」が「/usr/bin」よりも先にある。よしよし。
  • Emacs で「M-! echo $PATH」すると「/usr/bin」の方が先にある。これだ。これがいけないんだ。

「/Users/gan2/.rbenv/shims」が「/usr/bin」より前にくるようになれば解決するはずだ。


ぐぐってみると、この辺りの問題は exec-path と PATH の設定で対処できるらしいことが分かった。
でも真似して幾つか試してみたのに問題が解決しない。

(setq exec-path (cons (expand-file-name "~/.rbenv/shims") exec-path)) ; => ("/Users/gan2/.rbenv/shims" "/usr/bin" "/bin" "/usr/sbin" "/sbin" "/Applications/Emacs_Carbon.app/Contents/MacOS/libexec" "/Applications/Emacs_Carbon.app/Contents/MacOS/bin" "~/bin" "/usr/local/bin" "/usr/X11R6/bin")
(setenv "PATH" (concat (expand-file-name "~/.rbenv/shims:") (getenv "PATH"))) ; => "/Users/gan2/.rbenv/shims:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/local/bin:/usr/X11R6/bin"


上記の設定で、exec-path、PATH ともに "/Users/gan2/.rbenv/shims" が先頭にきている。
でも「M-! echo $PATH」では先頭に来ない。
どうも M-! が参照している PATH は、Terminal の PATH とも getenv で見れる PATH とも違うもののようだ。


ちなみに、以下を C-x C-e すると「/Users/gan2/.rbenv/shims/ruby」が出力される。

(apply 'call-process "which" nil t nil '("ruby"))


うーん。わっかんないなー。