एक CentOS कंटेनर में, मैं SASS को PHP के exec() से निष्पादित करने का प्रयास कर रहा हूं। SASS निष्पादन योग्य है, मैं मैन्युअल रूप से कंटेनर के अंदर से कमांड को सफलतापूर्वक निष्पादित कर सकता हूं, लेकिन PHP से नहीं।

मैं जिस कमांड की कोशिश कर रहा हूं वह है:

पीएचपी

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

में अनुवाद करता है:

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

मुझे निम्नलिखित त्रुटि मिलती है।

/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-linux]

रत्न: 2.0.14.1

सेंटोस: 7

कोई विचार, अगर मुझे कुछ याद आ रहा है?

-1
Starx 30 पद 2017, 16:47

2 जवाब

सबसे बढ़िया उत्तर

ठीक है, मैं समस्या का पता लगाने का प्रबंधन करता हूं। sass को सही ढंग से संचालित करने के लिए एक होम निर्देशिका की आवश्यकता होती है। यदि आप एक सिस्टम उपयोगकर्ता के रूप में PHP को क्रियान्वित कर रहे हैं, जो कि मेरे मामले में था, तो इसकी कोई होम निर्देशिका नहीं है, इसलिए यह विफल हो गया।

Linux पर, आप होम निर्देशिका बनाने के लिए mkhomedir_helper [user] का उपयोग कर सकते हैं। एक बार जब आप होम डायरेक्टरी बना लेते हैं, तो sass काम करना शुरू कर देगा।

0
Starx 30 पद 2017, 19:41

मुझे पहले भी इसी तरह की समस्या थी, जब मैंने एक PHP स्क्रिप्ट के अंदर से ग्रंट चलाने की कोशिश की थी। यह पता चला, समस्या लापता पर्यावरण चर थी।

तो यदि आप बैश में अपना एसएएस कमांड निष्पादित कर सकते हैं, लेकिन यह PHP स्क्रिप्ट के अंदर से काम नहीं करता है, तो निम्नलिखित आपकी समस्या को हल करने में आपकी सहायता कर सकते हैं।

अपने वर्तमान परिवेश संस्करणों को सूचीबद्ध करने के लिए, आप यूनिक्स कमांड 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
...

चूंकि एससीएसएस रूबी का उपयोग करता है, इसलिए सभी रूबी एनवी वर्र्स उपलब्ध होना महत्वपूर्ण है। तो आप 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";

मुझे यकीन नहीं है कि कौन से युद्ध वास्तविक महत्वपूर्ण हैं - इसलिए आपको इसे स्वयं ही समझना होगा।

0
Philipp 30 पद 2017, 17:01