2017-12-30 5 views
-1

CentOS 컨테이너에서 PHP의 exec()에서 SASS를 실행하려고합니다. SASS는 실행 가능하며 컨테이너 내부에서 수동으로 명령을 실행할 수 있지만 PHP에서는 실행할 수 없습니다. 내가 노력하고exec에서 작동하지 않는 SASS 컴파일러

명령이다 : 나는 다음과 같은 오류가

/usr/local/bin/sass /var/www/html/portal/web/styles/style_303.scss /var/www/html/portal/web/styles/style_303.css 2>&1 

:

$command = '/usr/local/bin/sass ' . $webFolderPath . '/styles/style_303.scss' . ' ' . $webFolderPath . '/styles/style_303.css'; 
$command .= " 2>&1"; 
echo $command; 
exec($command, $output, $return); 

가 변환

PHP.

/usr/share/rubygems/rubygems/path_support.rb:68:in `path=': undefined method `+' for nil:NilClass (NoMethodError) 
    from /usr/share/rubygems/rubygems/path_support.rb:30:in `initialize' 
    from /usr/share/rubygems/rubygems.rb:357:in `new' 
    from /usr/share/rubygems/rubygems.rb:357:in `paths' 
    from /usr/share/rubygems/rubygems.rb:379:in `path' 
    from /usr/share/rubygems/rubygems/specification.rb:794:in `dirs' 
    from /usr/share/rubygems/rubygems/specification.rb:658:in `each_normal' 
    from /usr/share/rubygems/rubygems/specification.rb:669:in `_all' 
    from /usr/share/rubygems/rubygems/specification.rb:822:in `each' 
    from /usr/share/rubygems/rubygems/specification.rb:864:in `find' 
    from /usr/share/rubygems/rubygems/specification.rb:864:in `find_inactive_by_path' 
    from /usr/share/rubygems/rubygems.rb:175:in `try_activate' 
    from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:132:in `rescue in require' 
    from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:144:in `require' 
    from <internal:abrt_prelude>:2:in `<compiled>' 

버전 :

사스 : 3.5.4 (최첨단)

루비 : 2.0.0p648 (2015년 12월 16일) x86_64에 리눅스]

보석 : 2.0.14.1

어떤 아이디어라도 놓치면 어떨까요?

+0

누락 된 환경 변수에 문제가있을 수 있습니다. – Philipp

+0

@Philipp, 뭐라고 요? 몇 가지 세부 사항을 알려주시겠습니까? – Starx

+0

PHP 코드도 표시하십시오. 컨테이너에 대해 언급했습니다. Docker 컨테이너에서 PHP와 SASS/Ruby를 실행하고 있습니까? 그 사람들은 어떻게 구성되어 있습니까? –

답변

0

좋아, 문제를 파악할 수있다. sass에는 홈 디렉토리가 올바르게 작동해야합니다. 필자가 PHP를 시스템 사용자로 실행하고 있다면 내 경우에는 홈 디렉토리가 없으므로 실패합니다.

Linux의 경우 mkhomedir_helper [user]을 사용하여 홈 디렉토리를 만들 수 있습니다. 홈 디렉토리를 만들면 sass이 작동하기 시작합니다.

0

이전에 PHP 스크립트 내부에서 잡담을 실행하려고했을 때 비슷한 문제가있었습니다. 문제가 누락 된 환경 변수였습니다.

그래서 bash에서 sass 명령을 실행할 수는 있지만 PHP 스크립트 내부에서는 작동하지 않는다면 다음을 통해 문제를 해결할 수 있습니다.

현재 환경 변수를 나열하려면 uncom 명령 printenv을 사용할 수 있습니다. 이것은 다음과 같은 목록을 제공해야합니다

LANG=en_US.UTF-8 
rvm_bin_path=/usr/local/rvm/bin 
rvm_version=1.26.11 (latest) 
RUBY_VERSION=ruby-2.2.1 
GEM_HOME=/usr/local/rvm/gems/ruby-2.2.1 
... 

scss는 모든 루비 환경을 사용할 수 있어야합니다. 따라서 printenvs 출력에서 ​​필요한 모든 것을 선택하여 배열 안에 쓸 수 있습니다.

$env = [ 
    "LANG" => "en_US.UTF-8", 
    "rvm_bin_path" => "/usr/local/rvm/bin", 
    ... 
]; 
$env_command = ''; 
foreach ($env as $var => $value) { 
    $env_command .= "$var=$value "; 
} 

$command = "/usr/local/bin/sass ..."; 

exec "$env_command $command"; 

정말 중요한 vars는 무엇인지 모르겠으니 스스로 알아야합니다.

+0

내가 당신과 비슷한 환경 변수를 얻기 위해 노력하고 있어요,하지만 난'HOSTNAME = 435f9c1b57ba TERM = xterm을 OLDPWD =의/var/www/html/포털 LS_COLORS = RS = 0 점점 오전 : 디는 = 01 PATH를 =는/usr/usr/local/bin :/usr/sbin :/usr/bin :/sbin :/bin PWD =/var/www/html/portal/web/스타일 SHLVL = 1 HOME =/루트 LESSOPEN = _ =는/usr/빈/printenv' – Starx

+0

내가 관련이있을 것 PATH' '이외의 아무것도 생각하지 않았다, 그래서 나는 그와 노력, 그리고하지 않았다 변화를 가져 오십시오. – Starx

+0

정말로 scss가 컨테이너 내부에서 작업하고 있습니까? 그리고 어떻게 printenv를 실행 했습니까? PHP 또는 콘솔에서? – Philipp

관련 문제