2016-10-22 6 views
0

私はGitHubにプッシュすると自動的にサイトを公開するWebhookを書いています。プロセスの一部は、私はPHPスクリプトで、スクリプトはGitHubののウェブフックによって呼び出されることを起動しようとしているので、ユーザがwww-dataあるPHPスクリプトからバンドルを実行する方法

bundle exec middleman build --clean 

でサイトを構築することが必要です。しかし、私が何を試みても、bundleが見つかりませんでした。

bundleコマンドをPHPスクリプトから実行するにはどうすればよいですか?

+0

ユーザーwww-dataのパスにあることを確認しますか? –

+0

Rubyのgem環境には、多くの変数が設定されている必要があります。そうでないと動作しません。最も重要なのは 'PATH'です。 – tadman

答えて

0

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

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

、私の場合2.3.1には、それを使用するには、次に設定RVMを希望ルビーバージョンをインストールします。

$ rvm install 2.3.1 
$ rvm use 2.3.1 

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

$ gem install packagename 

これが必要かどうかわかりませんが、私はSSHセッションを閉じて再度開きます。 rvmは環境変数を混乱させるので、申し訳ありません。

すべての環境変数を印刷するにはenvを実行してください。 printenvは何らかの理由でenvがない場合でも動作します。あなたはすべてのセットの大きなリストを取得します、あなたはルビー関連のものだけが必要です。 これらの値をコピー/ペーストしないでください。私は自分のシステムから引っ張った例です。あなたのものは違うでしょう!

PATH=/usr/local/rvm/gems/ruby-2.3.1/bin:/usr/local/rvm/gems/[email protected]/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/[email protected] 
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を再起動します。あなたのサービス名は私のものと異なるかもしれません。私はondrej/phpから5.6ビルドを使用しています。

の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 

私のための作品!

関連する問題