PHP가 내 RVM Ruby 설치를 인식하지 못합니다.

Seane

배경 : PHP로 웹 사이트를 구축하고 있는데 웹 사이트에서 Ruby 1.9로 작성된 스크립트를 호출하도록해야합니다. 이미 Ruby 1.8이 설치된 CentOS 5.10 서버를 사용하고 있으며 RVM을 사용하여 Ruby 1.9로 업그레이드했습니다. ruby --version명령 줄에서 입력하면 예상대로 Ruby 1.9가 설치되어 있다고 표시됩니다. 그러나 PHP를 사용하여을 호출 exec('ruby --version');하면 Ruby 1.8이 설치되어 있다고 표시됩니다. 또한 PHP를 사용하여를 호출 exec('which rvm');하면 RVM이 설치되어 있음을 알고 있어도 아무것도 반환하지 않습니다.

질문 : PHP가 Ruby 1.8의 시스템 설치 대신 Ruby 1.9의 RVM 설치를 사용하도록 허용하려면 어떻게해야합니까?

앨빈 리

PHP 스크립트를 실행하는 웹 서버 프로세스를 실행 하는 사용자는 명령 줄을 사용할 때 사용자와 다르다는 점을 기억하는 것이 중요합니다 . 이를 확인하기 위해 다음과 같은 PHP 스크립트를 생성 할 수 있습니다.

<?php

print exec('whoami');

명령 줄에서 직접 스크립트를 실행하면 사용자 이름이 표시됩니다. 웹 접근 폴더에 해당 스크립트를 넣고 (예 : 웹 브라우저를 통해 실행 http://localhost/whoami.php), 당신은 아마 같은 이름을 볼 수 있습니다 apache또는 www-data.

또한 명령 줄과 웹 브라우저에서 실행중인 Ruby를 비교할 수도 있습니다. 다음 PHP 스크립트를 사용하십시오.

<?php

print exec('which ruby');

명령 줄에서 실행 한 다음 웹 브라우저에서도 실행하십시오. 두 개의 다른 위치가 있어야합니다. 물론 이것이 핵심 문제입니다.

rvm을 설치할 때 홈 폴더 .bash_profile또는 .profile파일에 코드 줄이 추가되었을 수 있습니다 . 다음과 유사한 줄이 있는지 확인하려면 해당 파일의 끝 부분을 살펴보십시오.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

이 행은 rvm에 액세스 할 수 있도록 로그인하거나 터미널을 열 때마다 쉘 환경을 초기화합니다. 이를 확인하기 위해 다음을 사용하여 php 파일을 생성 할 수 있습니다.

<?php

print exec('env | grep rvm');

명령 줄에서, 몸과 같이이 실행, 당신은 관련 라인이 표시되어야 rvm_bin_path하고 rvm_path다른 사람을. 그러나이 스크립트를 웹에서 액세스 할 수있는 폴더에 넣고 브라우저에서 실행하면 해당 행이 브라우저에 출력되지 않습니다. 이는 PHP 프로세스가 생성 하는 www-data사용자 (또는 웹 서버가 실행되는 사용자)로 실행할 때 `.bash_profile스크립트에 있는 것과 동일한 rvm 초기화 행을 갖지 않기 때문 입니다.

이 문제를 해결하는 한 가지 가능한 방법은 PHP에서 올바른 환경 변수를 설정하여 exec호출 될 때 rvm 관련 항목 (예 : Ruby 버전 설정)을 실행하기 위해 이미 적절하게 초기화 된 환경 내에서 호출되도록하는 것입니다. 그러나 대부분의 경우 PHP 스크립트에서 이러한 환경 변수를 설정하지 못하도록하는 특정 safe_mode 보호가 PHP에 있습니다.

약간의 해킹 인 다른 해결책은 브라우저의 PHP 스크립트 가 명령 줄에서 실행하는 것과 동일한 루비 인터프리터를 실행하도록 하는 것입니다. 즉, 대신에 exec('ruby some_ruby_file.rb')할 것 exec('/home/my_username/.rvm/rubies/ruby-1.9/bin/ruby some_ruby_file.rb')입니다. 루비 인터프리터에 대한 경로를 방금 만들었습니다. 명령 줄에서 실행 which ruby하여 루비 인터프리터의 정확한 경로를 찾으십시오. 하지만www-data 폴더에서이 루비 인터프리터를 실행할 수있는 권한이 있는지 확인 해야합니다. 이 번거 로움을 피하기 위해 이것은 심지어 해킹에 가깝지만 단순히 해당 루비 인터프리터의 복사본을 만들어에서 소유 한 bin 폴더에 배치하고 루비 인터프리터가되는 www-dataPHP 스크립트를 사용 exec하는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

RVM이 Ruby를 설치하는 데 문제가 있습니까?

분류에서Dev

xcode가 내 장치를 인식하지 못합니다

분류에서Dev

Google의 SDTT가 내 위치를 인식하지 못합니다.

분류에서Dev

RVM이 OS x 10.9에 Ruby를 설치하지 못함

분류에서Dev

Xcode가 내 iOS 기기를 인식하지 못합니다

분류에서Dev

Xcode가 내 ViewController를 인식하지 못합니다.

분류에서Dev

Rails가 내 새 클래스를 인식하지 못합니다.

분류에서Dev

UIImageView가 내 탭 이벤트를 인식하지 못합니다.

분류에서Dev

rvm을 사용하여 Ubuntu에 Morden Ruby를 설치할 수 없습니다.

분류에서Dev

Airflow가 내 S3 연결 설정을 인식하지 못합니다.

분류에서Dev

RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

분류에서Dev

RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

분류에서Dev

RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

분류에서Dev

Sudo가 더 이상 내 비밀번호를 인식하지 못합니다.

분류에서Dev

Google Apps Script가 내 문서의 표를 인식하지 못합니다.

분류에서Dev

Sudo가 더 이상 내 비밀번호를 인식하지 못합니다.

분류에서Dev

FFmpeg가 내 오디오 소스를 인식하지 못합니다.

분류에서Dev

내 Windows 10 x64 PC가 마우스를 인식하지 못합니다.

분류에서Dev

Kali가 내 사운드 카드를 인식하지 못합니다.

분류에서Dev

Ecilpse가 Kitkat (4.4.2)로 업그레이드 한 후 내 장치를 인식하지 못합니다.

분류에서Dev

SmartOS가 설치시 키보드를 인식하지 못합니다.

분류에서Dev

Ubuntu Touch를 설치하려고 할 때 adb가 내 장치를 찾지 못합니다.

분류에서Dev

xcode Organizer가 내 장치를 감지하지 못합니다.

분류에서Dev

Visual Studio가 내 장치를 감지하지 못합니다.

분류에서Dev

내 웹 페이지가 등록 양식에 입력 된 데이터를 인식하지 못합니다.

분류에서Dev

rvm을 사용하여 Ruby 설치

분류에서Dev

PHP 클래스가 this-> method ()를 인식하지 못합니다.

분류에서Dev

Conda 설치 후 Tensorflow가 내 GPU를 인식하지 못하는 이유는 무엇입니까?

분류에서Dev

Ubuntu Installer가 내 파티션을 인식하지 못합니다

Related 관련 기사

  1. 1

    RVM이 Ruby를 설치하는 데 문제가 있습니까?

  2. 2

    xcode가 내 장치를 인식하지 못합니다

  3. 3

    Google의 SDTT가 내 위치를 인식하지 못합니다.

  4. 4

    RVM이 OS x 10.9에 Ruby를 설치하지 못함

  5. 5

    Xcode가 내 iOS 기기를 인식하지 못합니다

  6. 6

    Xcode가 내 ViewController를 인식하지 못합니다.

  7. 7

    Rails가 내 새 클래스를 인식하지 못합니다.

  8. 8

    UIImageView가 내 탭 이벤트를 인식하지 못합니다.

  9. 9

    rvm을 사용하여 Ubuntu에 Morden Ruby를 설치할 수 없습니다.

  10. 10

    Airflow가 내 S3 연결 설정을 인식하지 못합니다.

  11. 11

    RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

  12. 12

    RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

  13. 13

    RVM을 통해 설치할 때 내 Ruby는 어디에 설치됩니까?

  14. 14

    Sudo가 더 이상 내 비밀번호를 인식하지 못합니다.

  15. 15

    Google Apps Script가 내 문서의 표를 인식하지 못합니다.

  16. 16

    Sudo가 더 이상 내 비밀번호를 인식하지 못합니다.

  17. 17

    FFmpeg가 내 오디오 소스를 인식하지 못합니다.

  18. 18

    내 Windows 10 x64 PC가 마우스를 인식하지 못합니다.

  19. 19

    Kali가 내 사운드 카드를 인식하지 못합니다.

  20. 20

    Ecilpse가 Kitkat (4.4.2)로 업그레이드 한 후 내 장치를 인식하지 못합니다.

  21. 21

    SmartOS가 설치시 키보드를 인식하지 못합니다.

  22. 22

    Ubuntu Touch를 설치하려고 할 때 adb가 내 장치를 찾지 못합니다.

  23. 23

    xcode Organizer가 내 장치를 감지하지 못합니다.

  24. 24

    Visual Studio가 내 장치를 감지하지 못합니다.

  25. 25

    내 웹 페이지가 등록 양식에 입력 된 데이터를 인식하지 못합니다.

  26. 26

    rvm을 사용하여 Ruby 설치

  27. 27

    PHP 클래스가 this-> method ()를 인식하지 못합니다.

  28. 28

    Conda 설치 후 Tensorflow가 내 GPU를 인식하지 못하는 이유는 무엇입니까?

  29. 29

    Ubuntu Installer가 내 파티션을 인식하지 못합니다

뜨겁다태그

보관