Mac OS Catalina:无法从 PHP 执行 ruby
Mac OS Catalina : Can't execute ruby from PHP
我已将 Mac 更新为 Catalina 版本。
由于 Mac OS 的新版本,我无法再从 PHP 执行 ruby。
我在网上找不到任何东西。
这就是我从 PHP
调用 ruby 的方式
$cmd = "ruby duplicate_ios.rb '$xcode_version' '$xcodeproj_path' '$bundle_id' '$display_name' '$target_source' '$target_destination' '$iosTeamID'";
$outputDuplicateTarget = system($cmd);
当我从终端执行时,它起作用了。
但不是来自 PHP。
在 Catalina 发布之前,它起作用了。
编辑
在 ruby 脚本中
require "xcodeproj"
=> 似乎是崩溃的根源(仅来自 php 脚本)
Apple 已从其 OS、see deprecations
中删除了 Ruby 和其他脚本语言
您可能会想要使用 ruby 版本管理器,例如 RVM。有关安装说明,请参阅 https://rvm.io/rvm/install
要在 macOS 上维护最新的环境,您有多种选择:
rbenv
which is a minimally invasive version manager you can install with Homebrew.
rvm
更跨平台,但更深入地嵌入您的 shell 环境。
这两个都允许您同时安装不同版本的 Ruby 并使用项目目录中的 .ruby-version
文件自动在它们之间切换。这使得使用旧代码库变得非常轻松。
它们还允许您安装 Ruby 个 gem,而无需 sudo
任何东西,因为这些 gem 只为一个用户安装。
警告:在 PHP 中调用 system()
时,正确转义所有数据参数非常重要。使用 escapeshellcmd
来处理转义。如果您未能做到这一点,您 运行 可能会因引号冲突而导致命令错误的风险,或者更糟的是,因为用户可能会通过 运行 任意 shell 命令来劫持您的系统。
解决方案:
PHP 在 MAMP 中是 运行,它使用特殊的 ruby 版本。
使用 "php -S 192.168.xx.xx:8888" 而不是 MAMP 解决了问题!
我已将 Mac 更新为 Catalina 版本。 由于 Mac OS 的新版本,我无法再从 PHP 执行 ruby。
我在网上找不到任何东西。
这就是我从 PHP
调用 ruby 的方式$cmd = "ruby duplicate_ios.rb '$xcode_version' '$xcodeproj_path' '$bundle_id' '$display_name' '$target_source' '$target_destination' '$iosTeamID'";
$outputDuplicateTarget = system($cmd);
当我从终端执行时,它起作用了。 但不是来自 PHP。 在 Catalina 发布之前,它起作用了。
编辑 在 ruby 脚本中
require "xcodeproj"
=> 似乎是崩溃的根源(仅来自 php 脚本)
Apple 已从其 OS、see deprecations
中删除了 Ruby 和其他脚本语言您可能会想要使用 ruby 版本管理器,例如 RVM。有关安装说明,请参阅 https://rvm.io/rvm/install
要在 macOS 上维护最新的环境,您有多种选择:
rbenv
which is a minimally invasive version manager you can install with Homebrew.rvm
更跨平台,但更深入地嵌入您的 shell 环境。
这两个都允许您同时安装不同版本的 Ruby 并使用项目目录中的 .ruby-version
文件自动在它们之间切换。这使得使用旧代码库变得非常轻松。
它们还允许您安装 Ruby 个 gem,而无需 sudo
任何东西,因为这些 gem 只为一个用户安装。
警告:在 PHP 中调用 system()
时,正确转义所有数据参数非常重要。使用 escapeshellcmd
来处理转义。如果您未能做到这一点,您 运行 可能会因引号冲突而导致命令错误的风险,或者更糟的是,因为用户可能会通过 运行 任意 shell 命令来劫持您的系统。
解决方案:
PHP 在 MAMP 中是 运行,它使用特殊的 ruby 版本。
使用 "php -S 192.168.xx.xx:8888" 而不是 MAMP 解决了问题!