在Elastic Beanstalk上使用rgeo设置RoR

时间:2015-09-28 11:49:23

标签: ruby-on-rails-4 elastic-beanstalk rgeo

我正在努力让我的RoR应用程序在Elastic Beanstalk上运行并且正在努力让rgeo gem工作。我在网络服务器上得到的错误是:

I, [2015-09-28T11:26:54.982049 #21789]  INFO -- : Completed 500 Internal     Server Error in 5ms (ActiveRecord: 2.6ms)
F, [2015-09-28T11:26:54.983523 #21789] FATAL -- : 
NoMethodError (undefined method `point' for nil:NilClass):
  lib/app/weather_service.rb:61:in `block in get_location'
  ....

当代码访问由数据库中的POINT数据类型支持的模型属性时,会发生该错误。该错误通常是由于缺少依赖性,即此thread中描述的地理位置。所以我连接到底层EC2实例,安装了geos并重新安装了rgeo gem。这解决了rails console中的问题:

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ cd /var/app/current
[ec2-user@ip-xxx-xxx-xxx-xxx current]$ rails c
Loading production environment (Rails 4.2.4)
irb(main):001:0> RGeo::Geos.supported?
=> true

然而,这并没有解决Web服务器中的错误。我很确定我没有清楚地了解Elastic Beanstalk环境,也许对底层EC2实例进行直接更改不会使应用程序实例可以使用依赖项。我确实理解我需要将依赖项添加到自定义AMI或ebextensions以供将来部署,但我想确保在执行该过程之前我已将依赖项工作。任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果其他人遇到同样的问题,我确实找到了解决方案。这些是我遵循的步骤:

  • 使用AMI ami-bddbc48d
  • 创建了一个EC2实例
  • 使用此有用的脚本https://gist.github.com/whyvez/8d19096712ea44ba66b0
  • 安装PostGIS依赖项
  • 从该实例
  • 创建自定义AMI
  • 更新了我的EBS环境配置以使用新的自定义AMI
  • 瞧!问题解决了