透過 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

我能夠弄清楚這一點。首先,我已安裝的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 版本 ondrej/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

對我有用!

相關內容