0

rails (4.0.4)、ruby (2.0.0p247)、activerecord-postgis-adapter (0.6.5)、./config/environment.rb (ActiveRecord::Base.pluralize_table_names = false) に設定された単一のテーブル名を使用しています。

これは、開発およびテスト環境でうまく機能します。

本番環境では、1 つのプロジェクトを除くすべてのテーブルで機能します。このテーブルでは、コントローラ インデックスにエラーが表示されています。

私は足場を再生成し、project_controllers のこの行で問題を特定することができました:

set_rgeo_factory_for_column(:場所、RGeo::Geographic.spherical_factory(:srid => 4326))

エラーは次のとおりです。

 E, [2014-04-11T10:23:09.543299 #10740] ERROR -- : PG::UndefinedTable: ERROR:  relation "projects" does not exist
LINE 5:                WHERE a.attrelid = '"projects"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"projects"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

I, [2014-04-11T10:23:09.543625 #10740]  INFO -- : Completed 500 Internal Server Error in 7ms
F, [2014-04-11T10:23:09.545403 #10740] FATAL -- :
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "projects" does not exist
LINE 5:                WHERE a.attrelid = '"projects"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"projects"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum
): app/controllers/projects_controller.rb:11:in `index'

他のすべての環境で機能するのは本当に奇妙に思えますが、本番環境では、1 つのテーブルと関連するテーブルでのみ失敗します。

任意の提案をいただければ幸いです。

4

1 に答える 1

0

私は2つの解決策を見つけました:

  1. モデルからset_rgeo_factory_for_columnを削除します。とにかくデフォルトのファクトリを使用していました
  2. テーブル名 self.table_name を明示的に指定します。ActiveRecord::Base.pluralize_table_names = false を設定したので、これは奇妙です
于 2014-04-16T15:56:51.600 に答える