我有一个传统的Rails 2.3.2应用程序,它有一些功能允许用户通过浏览器访问一些rake任务。就在最近,应用程序停止显示可用任务列表(通过运行shell命令获得)在浏览器中。
在我的开发机器上它完美运行。它也适用于许多其他生产服务器。但是,我创建的任何新生产服务器都停止工作。
现在这是令人沮丧的部分。如果我在控制台中测试代码,它甚至可以在有问题的生产服务器上运行。我甚至通过在控制台中通过app.get
进行调用来测试它,它始终有效。我在控制台的开发和生产环境中测试了这个。同样,它似乎只是在浏览器中失败。
任何人都可以建议任何解决这个问题的策略吗?为什么通过浏览器和控制台的响应会有所不同?
答案 0 :(得分:0)
我花了一些时间进行挖掘,但我想到了这一点,所以我想我会分享我发现的,以防其他人遇到类似的问题。
答案在于我们的生产服务器设置的两个方面。
我们在生产服务器上使用Phusion Passenger(优秀的系统顺便说一句!),作为Passenger配置的一部分,它在不同的用户下运行,通过控制台访问的用户 。通常,这不是问题,因为两个用户(服务器用户和控制台用户)具有几乎相同的权限。
在设置生产服务器的过程中出现了一个错误,其中一个宝石(在我的情况下是一个相当重要的宝石 - i18n
)安装在错误的位置 。基本上,当它安装时,sudo
在命令开始时被遗漏了。因此,这个gem安装在控制台用户的主文件夹而不是系统gems文件夹中。
通常情况下,这种特殊情况不是问题,因为所有应用程序都正常运行。它只有当您尝试运行需要访问该gem的shell命令时才会让您感到悲伤。
顺便说一下,即使我尝试访问执行rake任务,这也会在日志中触发异常 。它给了我通常的 500内部服务器错误 但没有写入日志(这让我觉得奇怪)
如果您需要检查这样的内容,我最终认为它是以服务器用户的身份登录到控制台,然后尝试运行shell命令。我一做到这一点就给了我一个错误,说它无法找到所需的宝石。然后我使用gem which
命令检查了gem的位置,发现它已经安装在错误的位置。
我希望有人觉得这很有帮助,因为我花了几天的时间试图解决这个问题,这样可以节省时间。