2009-06-30 9 views
3

私は#!/usr/bin/env rubyを使用するスクリプトを用意していますが、Ubuntuサーバーに含まれているデフォルトのルビーの代わりにRuby Enterprise Editionを使用しました。したがって、スクリプトを実行しようとすると、スクリプトがフリークアウトします。 Ruby EEパスを/usr/bin/envに追加するにはどうしたらいいですか?/usr/bin/envを変更するには?

答えて

7

#!/usr/bin/env rubyは、コマンドラインから単にrubyを呼び出すのと同様です。したがって、同じ規則が適用されます。基本的には、環境変数$PATHの個々のエントリが順番にチェックされ、最初に見つかったrubyが使用されます。したがって、Ruby EE用のrubyが、検索パスの順番の方が、他のrubyより早いことを確認してください。

私はRuby EEに精通していないので、rubyという実行可能ファイルがない場合、Ruby EEの実行可能ファイルの検索パスの早い方のディレクトリにシンボリックリンクを作成してください。ルビーEEのドキュメントページで

+0

あなたはそれを行う方法を説明できますか? – nisevi

1

参照セクション1.6:あなたはルビーEE binディレクトリを含めるように/ etc/environmentファイルにあなたのPATHを更新することができ、システム全体の変更については http://www.rubyenterpriseedition.com/documentation.html

PATH = "/ opt/ruby​​-enterprise-xxx/bin:/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/bin:/ usr/games "

システム上の1人のユーザーだけが変更を表示したい場合は、.bashrcまたは.profileを正しいパスで更新できます。

ディレクトリのリストにREEパス​​が最初に含まれていることを確認してください。

5

Ruby EEに明示的な依存関係があるので、あなたの環境ではなくスクリプトを変更することができます(意図しない結果が生じる可能性があります)。

 
#!/usr/bin/env ruby 

 
#!/path/to/enterprise/edition/ruby 

なり今ではあなたがルビーがパスに含まれているものは何でもちょうどルビーの特定のバージョンを使用してではなく、読者に明らかになりました。

+0

スクリプトの移植性を完全に諦めている限り、これは問題ありません。場合によってはそれほど大きな問題ではないかもしれません。 – iconoclast

2

私はcronジョブが動作を停止したのと同じような問題がありました... Cronは、(そのユーザーとしてログインしたときに)ユーザーに期待するPATH設定を使わずにデフォルトでコマンドを実行しているようです。実際には、デフォルトのPATH設定(/ etc/profileや他の場所にあるもの)を使用していないようです。

私は(最初のものはcronのは、コマンドを実行すると思われる方法です)以下のコマンドを使用して問題を見つけることができた:

のsu -c 'は、printenv PATH' userXの

出力で:は/ usr/local/binにします。/ usr/binに:/ binにします。/ usr /ゲーム

のsu -l userXの-c 'は、printenv PATH'

出力:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin:/bin:/ usr/games

最初のコマンドは、裸のシステムのデフォルト以外の方法でPATH変数に値を設定していないようです。 私の場合、必要な(REE)パスを/etc/login.defsに追加するだけで解決しました。デフォルトでは次のようになります。

/etc/login.defs:103:ENV_PATH PATH =/usr/local/bin:/ usr/bin:/ bin:/ usr/games

関連する問題