2

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のような別のシェルの代わりに を実行するのはなぜですか?)cshksh
4

2 に答える 2

1

あなたはルビー環境を調達することができます、それが$HOMEapacheのためにそれを調達するのに十分であるかどうか、またはあなたが修正する必要があるかどうかはわかりません/etc/init.d/apache2が、行は次のとおりです:

source /path/to/rvm/environments/<name>

ここで、<name>完全なルビー名またはエイリアス名のいずれかを使用できます

次のコマンドでエイリアスを作成できます。

rvm alias create veve 1.9.3-p125@my-project

にインストールされているRVMの/home/app/.rvm場合、次を使用できます。

source /home/app/.rvm/environments/veve

.bashrcまたは(上部のすぐ近く、/etc/init.d/apache2下のシバン)。

于 2012-08-17T23:23:57.250 に答える
0

あなたはいつでもできる

sudo ln -s /usr/local/rvm/rubies/default/bin/ruby /usr/bin/ruby

これにより、rvm 管理の Ruby のデフォルト バージョンがリンクされ、/usr/bin/ruby何もする必要がなくなります。設定して忘れてください。

于 2013-06-23T22:34:21.720 に答える