我正在尝试在 Elastic Beanstalk 上启动并运行我的 RoR 应用程序,并且正在努力让 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 数据类型支持的模型属性时,就会发生该错误。该错误通常是由于缺少依赖项,即此线程中描述的 geos 。所以我连接到底层 EC2 实例,安装 geos 并重新安装 rgeo gem。这解决了rails控制台中的问题:
[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 以供将来部署,但我想确保在完成该过程之前我的依赖项正常工作。任何指导将不胜感激。