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 解决了问题!