Ubuntu 12.04 で新しいサーバーを構成し、RVM の使用を開始しました。
Ryan Biggのガイドに従って、システム全体にインストールされたRubyを使用せずに、ユーザーの下にRVMをインストールしました(sudoを使用したルートとしてではなく、私として) 。だから、/usr/bin の下に Ruby はありませんでした。私の最初の仕事は、すべての CGI スクリプトのシバン行を次のように置き換えることでした。
!#/usr/bin/ruby
に
!#/usr/bin/env ruby
しかし、私のスクリプトは Apache では動作しませんでした。ターミナルでは (./index.cgi
たとえば と入力して) それらを実行できましたが、ブラウザーでは実行できませんでした。関連する注記: どちらのユーザーも同じです。つまり、Apache ユーザーは、端末にログオンしているユーザーと同じです。PHP テストを通じて、RVM 環境 (の最後の行.bashrc
) が Apache にロードされていないことを確認しました。
RVM で CGI スクリプトを実行するためのこのヒントを見ました。これは、特定のバージョンの Ruby の完全なパスをシバン行に入れることを提案しています。これは、異なるバージョンの Ruby で実行されるスクリプトがある場合に役立ちます。しかし、私のスクリプトは、異なるユーザーと異なるパスを使用して、異なるマシンで実行する必要があるためです。
私にとってうまくいく解決策は、目的の Ruby バージョンのシンボリックリンクを /usr/bin の下に置くことです。
sudo ln -s /home/apache_user/.rvm/rubies/ruby-1.8.7-p370/bin/ruby /usr/bin/ruby
rvm --default use
しかし、それよりも優れていると思うので、より良い解決策があるかどうか知りたいですsudo ln -s
。
私は考えています:
- 起動時にRVM環境をロードします(しかし、それを達成する方法はわかりません)。
- Web リクエストごとに RVM 環境をロードする (パフォーマンスが低下する可能性があり、それを行うように Apache を構成する方法がわかりません)。
PassEnv
おそらくRVM環境がロードされているので、ディレクティブで渡す関連変数の名前を推測するだけです。しかし、私はそれを疑います。(Apache がor.bashrc
のような別のシェルの代わりに を実行するのはなぜですか?)csh
ksh