php 経由で www-data として Ruby スクリプトを実行する

php 経由で www-data として Ruby スクリプトを実行する

私は Apache サーバー上で PHP アプリケーションを実行しています。PHP アプリケーションから、コマンド ラインで Ruby スクリプトを実行する必要があります。ターミナルから としてスクリプトを直接実行するとuser、正常に動作することを確認しました。 のローカル Ruby 環境は、userパス変数とソースを設定することでセットアップされ、/home/user/.rvm/scripts/rvmこれによりスクリプトはステートメントを使用して要件をロードできますrequire

PHP アプリケーションでは、スクリプトはこれらの require ステートメントで失敗します。これは、ユーザー用の Ruby 環境が設定されていないためだと思いますwww-data。私はこれまで Ruby を使用したことがなく、その環境を設定する正しい方法がわかりません。

答え1

私はこれを理解することができました。質問に対する回答を SO に投稿しました。お役に立てば幸いです。

https://stackoverflow.com/a/40224414/1672458

私はこれを理解することができました。まず、私はインストールされたrvmwww-dataアカウントがアクセスできるように、マルチユーザー インストールとしてインストールします。

$ curl -sSL https://get.rvm.io | sudo bash -s stable

必要な Ruby バージョン (私の場合は 2.3.1) をインストールし、それを使用するように rvm を設定します。

$ rvm install 2.3.1
$ rvm use 2.3.1

実行して必要な gem をインストールしますgem。rvm はマルチユーザー インストールであるため、これらの gem は特定のユーザーではなくシステムに保存されます。

$ gem install packagename

これが必要かどうかはわかりませんが、SSH セッションを閉じて再度開きます。rvm は環境変数を混乱させるので、安全を第一に考えてください。

実行するenvと、すべての環境変数が出力されます。何らかの理由で出力されないprintenv場合にも機能します env。設定されているすべてのものの大きなリストが表示されますが、必要なのは Ruby 関連の変数だけです。これらの値はコピー/貼り付けしないでください。これらは私のシステムから取得した例です。お客様のシステムとは異なる可能性があります。

PATH=/usr/local/rvm/gems/ruby-2.3.1/bin:/usr/local/rvm/gems/ruby-2.3.1@global/bin:/usr/local/rvm/rubies/ruby-2.3.1/bin:/usr/local/rvm/bin:/home/steven/bin:/home/steven/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
rvm_bin_path=/usr/local/rvm/bin
GEM_HOME=/usr/local/rvm/gems/ruby-2.3.1
IRBRC=/usr/local/rvm/rubies/ruby-2.3.1/.irbrc
MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-2.3.1
rvm_path=/usr/local/rvm
rvm_prefix=/usr/local
rvm_ruby_string=ruby-2.3.1
GEM_PATH=/usr/local/rvm/gems/ruby-2.3.1:/usr/local/rvm/gems/ruby-2.3.1@global
RUBY_VERSION=ruby-2.3.1

ここで、PHP にこれらの変数を認識させる必要があります。システム上で適切なファイルを見つける必要がありますが、これは難しい場合があります。どれが正しいかを知る方法がないので、試行錯誤しました。

私のシステム上のファイルは です/etc/php/5.6/fpm/pool.d/www.conf。追加 全て以前に取得した環境変数を以下の形式でこのファイルに入力します。PATHここでも必要になることに注意してください。

env[rvm_path] = /usr/local/rvm
env[rvm_prefix] = /usr/local

再起動してくださいphp-fpm。サービス名は私のものとは異なる場合があります。私は5.6ビルドを使用しています。 オンドレイ/php

Ubuntu 15.04 以降 (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 14.10 以降:

$ sudo service php5.6-fpm restart

最後に、スクリプト自体で、コマンドcdを実行するディレクトリを指定する必要がありますbundle。私の短いスクリプトは次のとおりです。

cd /opt/slate
/usr/bin/git reset --hard
/usr/bin/git pull
bundle exec middleman build --clean
cp -R /opt/slate/build/* /var/www/docs

私には効果がありました!

関連情報