Rails開発です。このアプリでは、環境変数LD_LIBRARY_PATH = /usr/local/Oracle/lib
を指定する必要がありますが、Sudoスクリプト/サーバーでアプリを実行すると、そのため実行されません。ライブラリパスがルートの環境にありません。
機能させるにはどうすればよいですか?ルート./bashrc
の下にパスを配置しようとしましたが、機能しませんでした。
同様の問題がありました。私は/etc/sudoers
ファイルと私はこれらの行を見た:
Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR\ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME\ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTICATION ] LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC\ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS\ _XKB_CHARSET XAUTHORITY "
私の環境変数を取得するには、 "XAUTHORITY"の後にその名前を追加する必要がありました。あなたのケースでは:
デフォルトenv_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR\ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME\ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION\[.____。LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASARY LC_MEASURE LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS\ _XKB_CHARSET XAUTHORITY LD_LIBRARY_PATH "
試してみてください。
また、BASH_ENV="~/.bashrc"
in /etc/environment
。
クレイジーなアイデアですが、サーバーが実際にrootとして実行されていることを確信していますか?一部のサーバーは、実行に使用するアカウントを指定しているため、起動スクリプトをrootとして呼び出しても、実際には別のユーザーとして実行されています。
Rootユーザーに到達する方法はここで重要です。 「ログイン」するための異なる方法は、異なる環境を作成します。
例えば:
.bashrc
起動時.bash_profile
起動時.ssh/environment
同じように/etc/pam.d/login
は、pam_env.soを使用して/etc/security/pam_env.conf(ディストリビューションによって異なります)および/ etc/environment(readenv = 1がある場合)をコマンドラインで読み取りますしたがって、必要な環境が得られない場合は、開始するソフトウェアにつながるログインのチェーンを把握する必要があります。これは、gdm(X)ログイン->端末エミュレータ-> bashシェル-> su-> bashシェル(ルート)->ソフトウェアのようになります。
ただし、最も正確に推測したい場合は、/etc/environment
は、最近のディストリビューションのすべてのプロセスで読み取る必要があります。
Railsプロセス内から環境変数を設定してみてください。$ Rails_ROOT/config/environment.rbに以下のようなものを追加してみてください。
Rails::Initializer.run do |config|
ENV['LD_LIBRARY_PATH'] = "/usr/local/Oracle_client/v8_1_7/lib"
end
oracleデータベースバインディングのrequireまたはgemステートメントを追加する前に、これが設定されていることを確認する必要があります。
これを試しましたか:
Sudo su - root -c "LD_LIBRARY_PATH=/usr/local/Oracle/lib <command to start the app>"
環境変数の設定とコマンドの実行の間にセミコロンがないことに注意してください。
スクリプトに追加する方法はいくつかありますが、ダイナミックリンカーの構成へのパスを直接追加する方が簡単で堅牢なアプローチになると思います。
$ Sudoエディター/etc/ld.so.conf.d/railslibs
質問で言及したパスをそのファイルに追加し、Sudo ldconfig
を実行します。
それは環境の変更を不要にするはずです。
これには、上記のInsyteが提案する方法を含め、いくつかの方法があります。
ただし、/ etc/ld.so.confに属していない環境変数を設定する必要がある場合は、単に/ etc/environmentに配置することもできます。
これがredhatファミリーのディストリビューションの場合:
echo 'export LD_LIBRARY_PATH=/usr/local/Oracle/lib' > /etc/profile.d/Oracle