【问题标题】:How to set up a postgis-adaptered Ruby on Rails app for Heroku deployment?如何为 Heroku 部署设置一个支持 postgis 的 Ruby on Rails 应用程序?
【发布时间】:2016-11-17 17:44:07
【问题描述】:

我有以下几点:

宝石:

gem 'pg', '~> 0.18'
gem 'activerecord-postgis-adapter', '4.0.0'
gem 'rgeo-geojson'

初始化器:config/initializers/rgeo.rb

require 'rgeo-activerecord'

RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
  # By default, use the GEOS implementation for spatial columns.
  config.default = RGeo::Geos.factory_generator

  # But use a geographic implementation for point columns.
  config.register(RGeo::Geographic.spherical_factory(srid: 4326), geo_type: "point")
end

数据库设置:config/database.yml

default: &default
  adapter: postgis
  encoding: unicode
  username: appname_u
  password: password
  su_username: appname_su
  su_password: Pa55w0rd
  schema_search_path: "public, postgis"
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
  <<: *default
  database: appname_development
  script_dir: /usr/local/opt/postgis/share/postgis
test:
  <<: *default
  database: appname_test
  script_dir: /usr/local/opt/postgis/share/postgis

production:
  <<: *default
  database: appname_production
  url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>
  username: unfold
  password: <%= ENV['UNFOLD_DATABASE_PASSWORD'] %>

启用heroku postgresql的postgis扩展:

$ heroku pg:psql --app ngrails-unfold
> CREATE EXTENSION postgis;
> select postgis_version();
            postgis_version            
---------------------------------------
 2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

数据模型迁移:

class CreateLocations < ActiveRecord::Migration[5.0]
  def change
    create_table :locations do |t|
      t.string :name, null: false
      t.st_point :latlon, geographic: true, null: false

      t.timestamps
    end

    add_index :locations, :name
  end
end

构建包:

1. Possibly a frontend app buildpack
2. https://github.com/cyberdelia/heroku-geo-buildpack.git Or https://github.com/desaperados/heroku-buildpack-geo.git 
3. heroku/ruby

但我仍然在生产中遇到错误:

NoMethodError(nil:NilClass 的未定义方法“属性”) ——— 日志———

heroku[router]: at=info method=POST path="/api/locations.json" host=yourappname.herokuapp.com request_id=4053b701-9d3e-479c-8a33-c44e539ccdc8 fwd="45.63.35.55" dyno=web.1 connect=3ms service=28ms status=500 bytes=551

Started POST "/api/locations.json" for 45.63.35.55 at 2016-11-15 14:36:41 +0000

Processing by LocationsController#create as JSON

Parameters: {"location"=>{"name"=>"San Francisco Airport", "latlon"=>"POINT(-122.381827 37.62161)"}}

BEGIN

Location Exists (1.7ms)  SELECT  1 AS one FROM "locations" WHERE "locations"."name" = $1 LIMIT $2  [["name", "San Francisco Airport"], ["LIMIT", 1]]

——— 来自heroku的错误日志———

ROLLBACK

Completed 500 Internal Server Error in 15ms (ActiveRecord: 6.1ms)

NoMethodError (undefined method `property' for nil:NilClass):

app/controllers/locations_controller.rb:20:in `create'

——— 来自本地主机的成功日志———-

INSERT INTO "locations" ("name", "latlon", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["name", "San Francisco Airport"], ["latlon", "0020000001000010e6c05e986fda836eb54042cf90ea9e6eeb"], ["created_at", 2016-11-15 14:35:29 UTC], ["updated_at", 2016-11-15 14:35:29 UTC]]

COMMIT

那么在 Heroku 上设置支持 postgis 的 Rails 应用程序的正确步骤是什么?

顺便说一句,该应用程序在 localhost 上运行顺畅。无法在 Heroku 上对其进行整理。

【问题讨论】:

  • 你是怎么解决这个问题的?

标签: ruby-on-rails heroku postgis rgeo


【解决方案1】:

他们在 Heroku 网站上有很好的解释:

https://devcenter.heroku.com/articles/sqlite3

您应该检查一下并逐步进行

【讨论】:

  • 这和 POSTGIS 有什么关系?
猜你喜欢
  • 2016-01-06
  • 2012-09-15
  • 2016-12-25
  • 2018-06-10
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多