我有一个Grails 2.0.0 Web应用程序,它可以在DEV和PROD环境中运行,没有任何问题。这两个环境都位于运行 Tomcat 7 的 CentOS 6.0 服务器上。
由于客户的要求,我的任务是使用 Amazon 的 Web 服务将应用程序部署到云中。我已经能够做到这一点,但是我看到任何读取/写入会话数据的表单字段(即下拉框)都有奇怪的行为。例如,当我从下拉框中选择一个值时,所选值应保存到会话中,并在 ajax 调用以过滤相应的国家/地区数据列表后调用。如果我选择"百慕大",下拉值实际上(错误地)从列表中(在 ajax 调用之后)更改为我没有选择的另一个国家/地区。
虽然我已经确认会话变量包含错误的国家/地区,但我也确认了所有特定于应用程序的代码都正常工作(因为它应该在 DEV 和 PROD 环境中工作)。我相信问题可能是由于具有不同的环境配置。我的 DEV/PROD 环境使用 CentOS 6.0,但我的 Amazon Cloud 环境使用 Red Hat Linux。 由于亚马逊不提供 CentOS 映像,Red Hat 是我能找到的最接近的口味。
我想知道配置的差异是否会影响功能。或者,也许这是亚马逊特有的东西。例如,所有传入/传出流量都通过亚马逊的内部威胁管理网关 (TMG)。也许这会影响会话数据?
有没有人有过类似的经历?或者谁能指出我正确的方向?这个问题已经影响了我几个星期了......
谢谢!
RedHad,CentOS和Amazon Linux具有基本相同的软件包,除了一些额外的软件包可能不会干扰运行。
我认为亚马逊内部TMG也不是问题,因为它会阻止网络数据包,但不会更改数据包内容。
然后它只持续雄猫,圣杯和您的应用程序:
- 您是否尝试过将Grails版本升级到2.0.4或2.1.0?
- 您是否在日志中确认您的 AJAX 请求实际上正在处理中?
- 你们的Xms、Xmx和PermGen雄猫配置是什么?
- 您的 EC2 虚拟机的大小是多少?如果是 m1.micro,您应该更改为 m1.small?
此外,我建议您尝试其他名为Elastic Beanstalk的亚马逊产品,该产品使用EC2,Auto Scaling Group,Elastic Load Balance和Cloud Watch,提供了一个非常简化和集成的控制台来管理您的环境,可以非常快速地测试不同的配置。
如果您现在安装了 MySQL,则可能需要将其替换为 MySQL RDS 实例,并将 EC2 实例仅用于 Web 应用程序。
问题是 Microsoft TMG 设置为执行缓存,这导致了问题。