【问题标题】:Different output from ruby console and applicationruby 控制台和应用程序的不同输出
【发布时间】:2012-12-03 04:57:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我怀疑您是否在控制台中获取 HTML,因此您的列表必须是一个字符串。如果它在生产控制台中按预期工作,则在视图中呈现此字符串可能存在问题。能否贴出相关的控制器并查看代码?
  • 我肯定会在控制台中获取 HTML,因为我调用了app.get,然后检查了app.response,它显示了为网页返回的 HTML

标签: ruby-on-rails debugging console


【解决方案1】:

花了一些时间挖掘,但我想通了,所以我想我会分享我的发现,以防其他人遇到类似问题。

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多