0

我有一个遗留的 Rails 2.3.2 应用程序,它有一些功能允许用户通过浏览器访问一些 rake 任务。就在最近,该应用程序停止在浏览器中显示可用任务列表(通过运行 shell 命令获得)。

在我的开发机器上它工作得很好。它也适用于许多其他生产服务器。但是,我创建的任何新生产服务器都会停止工作。

现在这是令人沮丧的部分。如果我在控制台中测试代码,即使在有问题的生产服务器上也能完美运行。我什至通过app.get在控制台中拨打电话对其进行了测试,它始终有效。我已经在控制台的开发和生产环境中对此进行了测试。同样,它似乎只在浏览器中失败。

任何人都可以提出任何解决这个问题的策略吗?为什么通过浏览器和控制台的响应会有所不同?

4

1 回答 1

0

这需要一点挖掘,但我想通了,所以我想我会分享我发现的东西,以防其他人遇到类似的问题。

答案在于我们的生产服务器设置的两个方面。

  1. 我们在我们的生产服务器上使用 Phusion Passenger(顺便说一句,优秀的系统!),作为乘客配置的一部分,它在与我通过控制台访问的用户不同的用户下运行。通常,这不是问题,因为两个用户(服务器用户和控制台用户)具有几乎相同的权限。

  2. 在生产服务器的设置过程中出现了一个错误,其中一个 gem(在我的例子中是一个相当重要的 - i18n)安装在错误的位置。基本上,当它安装时sudo,在命令的开头就错过了。因此,这个 gem 安装在控制台用户的主文件夹中,而不是系统 gems 文件夹中。

通常这种特殊情况不是问题,因为所有应用程序都正常运行。只有当您尝试运行需要访问该 gem 的 shell 命令时,它才会让您感到悲伤。

顺便说一句,即使我尝试访问执行 rake 任务,这也不会在日志中触发异常。它给了我通常的500 内部服务器错误,但没有写入日志(这让我觉得有点奇怪)

如果你需要检查这样的事情,我最终发现它是以服务器用户身份登录到控制台,然后尝试运行 shell 命令。一旦我这样做,它就给了我一个错误,说它找不到所需的宝石。然后我使用命令检查了 gem 的位置,gem which发现它安装在错误的位置。

我希望有人觉得这很有帮助,并且可以节省他们的时间,因为我花了几天时间试图弄清楚这一点。

于 2012-12-03T05:39:11.613 回答