Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 1630272 Subscribe with livedoor Reader 役立つリンク集

2012-05-28

[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-pathPATH の設定で対処できるらしいことが分かった。

でも真似して幾つか試してみたのに問題が解決しない。


(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-pathPATH ともに "/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"))

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


参考

sugyansugyan 2012/05/28 17:13 不思議ですね… 少なくとも自分の環境(Mac OS X 10.7.4, Emacs 23.4.1)では
(setenv "PATH" (concat (expand-file-name "~/.rbenv/shims:") (getenv "PATH")))
だけで確実にM-! echo $PATH にも反映されて、rbenvのrubyが使われるようになっているようなのですが。

gan2gan2 2012/05/28 20:39 コメントありがとうございます。
sugyan さんは setenv だけで M-! echo に反映されるのですね。よい情報を聞きました。

僕は OS は全く同じですが、Emacs22 (Carbon Emacs) です。
それが関係しているのでしょうか・・・。

sugyansugyan 2012/05/28 20:59 なるほど、Carbon Emacsですか。
自分はそのへん詳しくないですが、Carbonまではmac-fix-envとかns-grabenvといったものがあったそうで、環境変数まわりの仕組みが結構違っているような気がします。
23以降を使うと解決するかもしれませんね。
見当違いでしたらすみません…

gan2gan2 2012/05/28 21:22 おー、やっぱりその可能性があるのですね・・・。
23以降には移行したいと考えていたのでいい機会かもしれません。
mac-fix-env などについてもちょっと興味があるので、
過去に sugyan さんが書かれたエントリを参考にさせて頂きます。

度々ありがとうございます!

hirono2011hirono2011 2012/07/10 10:26 設定ファイルに、
(dolist (dir (list
"/home/ユーザ名/.rbenv/shims/"
))
(when (and (file-exists-p dir) (not (member dir exec-path)))
(setenv "PATH" (concat dir ":" (getenv "PATH")))
(setq exec-path (append (list dir) exec-path))))

と書けば、
(executable-find "ruby")
の結果が、rbenvのRubyを指すようになっていました。

しかし、これでEmacsのevernote-modeを起動すると、
Spawning child process: exec format error
というエラーがでるようになっていました。

なお、rvmだとこのようなエラーはでなかったのですが、どちらも自分が目的とした
evernote-mode
は、使えていないです。

gan2gan2 2012/07/11 21:44 コメントありがとうございます!

僕の環境(最近 23.4.1 になりました!)でも上記の dolist から始まる S 式を評価したあとに、
(executable-find "ruby") を実行すると、"/Users/gan2/.rbenv/shims/ruby" が返ってきました。
そして、念のため S 式を評価しない状態でも試してみたのですが、
なんとこちらでも "/Users/gan2/.rbenv/shims/ruby" が返ってきました。

また、S 式を評価したかどうかに関係なく M-! which ruby では /usr/bin/ruby が返ってきます。

なんだかなーって感じです。トホホ。

elimelim 2013/03/18 02:52 すげー今更ですけどこれですかね(さっきまで同じような問題に嵌っていて以下ので解決した)

http://d.hatena.ne.jp/uk-ar/20110424/1303604763

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gan2/20120528/1338191267
リンク元