2012-03-05 13 views
0

こんにちは私は過去数日間、Herokuにレールアプリケーションを配備しようとしていましたが、このエラーが発生しました。「申し訳ありませんが、何か問題がありました。まもなくそれを見ていく」と語った。私はHerokuの案内に従っているにもかかわらず、私はHerokuのログを確認し、これはこう言われる、それはローカルで正常に動作としてHerokuへのデプロイメントのトラブル

2012-03-05T18:59:41+00:00 app[web.1]: Processing by StoreController#index as HTML 
2012-03-05T18:59:41+00:00 app[web.1]: Rendered store/index.html.erb within layouts/application (66.7ms) 
2012-03-05T18:59:41+00:00 app[web.1]: Completed 500 Internal Server Error in 164ms 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]: ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist 
2012-03-05T18:59:41+00:00 app[web.1]: LINE 1: SELECT "products".* FROM "products" ORDER BY Name 
2012-03-05T18:59:41+00:00 app[web.1]:              ^
2012-03-05T18:59:41+00:00 app[web.1]: : SELECT "products".* FROM "products" ORDER BY Name): 
2012-03-05T18:59:41+00:00 app[web.1]:  2: <p id= "notice"><%= notice %></p> 
2012-03-05T18:59:41+00:00 app[web.1]:  3: <% end %> 
2012-03-05T18:59:41+00:00 app[web.1]:  8:   
2012-03-05T18:59:41+00:00 app[web.1]:  6: <div class ="entry"> 
2012-03-05T18:59:41+00:00 app[web.1]: app/views/store/index.html.erb:5:in `_app_views_store_index_html_erb___635623125359494649_35532040' 
2012-03-05T18:59:41+00:00 app[web.1]:  7:  <div class="img"> 
2012-03-05T18:59:41+00:00 app[web.1]:  5: <% @products.each do |product| %> 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]:  4: 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]: cache: [GET /] miss 

は何の問題だろうか?テストと開発のためのデータベースとしてSQLite3を使用していますが、HerokuではPostgreSQLを使用していますか?

+0

ローカルで動作すると言えば、実稼働環境をローカルでテストしたか、開発環境について話していますか? – PhillipKregg

答えて

2

は、私たちはあなたのエラーをよく見てみましょう:

ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist 
LINE 1: SELECT "products".* FROM "products" ORDER BY Name 
                ^

大文字が、引用符で囲まれていないNameは非常に疑わしいです。 SQL識別子は、引用符で囲まない限り大文字と小文字を区別しません(大文字に正規化されているはずですが、PostgreSQLは小文字に正規化されます)。

create table t (name varchar(255)); 
create table t (Name varchar(255)); 
create table t (nAmE varchar(255)); 
create table t (NAME varchar(255)); 

が、これらはすべて異なっている::だから、これらのテーブルはすべて同じである

create table t ("name" varchar(255)); 
create table t ("Name" varchar(255)); 
create table t ("nAmE" varchar(255)); 
create table t ("NAME" varchar(255)); 

私はあなたが"Name"列ではなくname列を使用してテーブルを作成したことを推測します。小文字のname列を使用してテーブルを再作成することをおすすめします。

Model.where(...).order('"Name"') 
をしかし、実際に、小文字の列名を使用すると、あなたの人生が楽になりますし、あなたのコードを維持し、人々はあなたの思い出fonderがあります:あなたは orderを呼び出すときに代わりに、あなたが列を引用できました。

あなたは、SQLite上で開発していますが、PostgreSQLに展開しているところの他の箇所にコメントしています。 SQLiteはそれらが引用されている場合でも、列名に大文字小文字を無視するようだ:

sqlite> create table t ("Name" text); 
sqlite> insert into t values ('a'); 
sqlite> select * from t order by name; 
Name 
a 

だから、すべてはSQLiteの中で正常に動作します。しかし、PostgreSQLでは、引用符で囲まれた識別子の場合に注意を払っています(SQL仕様によると)ORDER BY Nameは、カラムが作成されたときに引用された場合(つまりcreate table t ("Name" varchar...など)に失敗します。

SQLiteとPostgreSQLの違いは他にもあります。 ActiveRecordはデータベース間のすべての違いからあなたを守ることはできませんので、常に同じスタックを使用して開発、テスト、デプロイする必要があります(データベースのバージョンまで)。

-1

移行する必要があるようです。

heroku run rake db:migrate 
+0

私はまだあなたが分岐マスターのGit状態# 何もコミットすると述べてきたように私が行っている –

-1
  • あなたgit statusきれいなのですか?
  • もしそうなら、最近あなたにgit push heroku masterがありますか?

コードがコミットされ、プッシュされていることを確認してください。次に、移行を実行する必要があります。

+0

をコマンドを実行した後に同じエラーを取得します(作業ディレクトリクリーン) gitのプッシュHerokuのマスターはすべて最新の Herokuの実行レーキdb:migrate rake db:migrateを端末に接続... up、run.1同じエラーが発生する –

+0

migrateを実行中にエラーが表示されますか?また、db/schema.rbでproductsテーブルにnameカラムがあることを確認できますか? –

+0

ええ、それは名前の列を持っている、いいえ私はコンパイル時にエラーを取得しません。私はsqlite3をテストおよび開発のためのデータベースとして使用していますが、herokuではpostgresqlを使用しています。これが当てはまる場合は、ローカルでpostgresqlに移行してからプッシュを再試行することをお勧めします。 –

関連する問題