私は 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
私はこれを理解することができました。まず、私はインストールされたrvm
www-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
私には効果がありました!