2012-03-05 5 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"') 

그러나 및 코드를 유지하는 사람들은 당신의 기억을 정하고있을 것이다 : 또는 order를 호출 할 때 열을 인용 할 수있다.

당신은 SQLite로 개발하고 있지만 PostgreSQL로 배포하고있는 다른 곳에서는 주석에 주목합니다.

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

그래서 모든 SQLite는에서 잘 작동합니다 : SQLite는 그들이 인용하는 경우에도 열 이름의 케이스를 무시하는 것 같다. 그러나 PostgreSQL은 따옴표로 묶인 식별자의 경우에주의를 기울여야합니다 (SQL 사양에서 말한 것처럼) ORDER BY Name은 열이 생성되었을 때 (예 : create table t ("Name" varchar...) 인용되지 않으면 실패합니다.

SQLite와 PostgreSQL 간에는 다른 점이 있습니다. ActiveRecord는 데이터베이스 간의 모든 차이점에서 사용자를 보호 할 수 없으므로 동일한 스택 (데이터베이스 버전까지)을 사용하여 항상 개발, 테스트 및 배포해야합니다.

-1

마이그레이션해야 할 수도 있습니다.

heroku run rake db:migrate 
+0

나는 아직도 당신이 지점 마스터에 자식 상태 # 아무것도 확정 말했듯이 내가했던 –

-1
  • git status 깨끗?
  • 그렇다면 최근에 git push heroku master을 보내시겠습니까?

코드가 커밋되고 푸시되었는지 확인하십시오. 그런 다음 마이그레이션을 실행해야합니다.

+0

명령 실행 후 동일한 오류 (작업 디렉토리 청소) 자식 푸시 Heroku가 마스터 모든 최신 Heroku가 실행 레이크 db : migrate rake db : migrate를 터미널에 연결 ... up, run.1 여전히 동일한 오류가 발생합니다. –

+0

migrate를 실행하는 동안 오류가 발생합니까? 또한 db/schema.rb에서 제품 테이블에 이름 열이 있는지 확인할 수 있습니까? –

+0

네, 이름 열이 있습니다. 컴파일 할 때 오류가 발생하지 않습니다. 내가 테스트 및 개발을 위해 내 데이터베이스로 sqlite3을 사용하고 있지만 heroku는 postgresql을 사용한다는 사실이 될 수 있습니다. 이 경우 로컬에서 postgresql로 마이그레이션 한 다음 다시 시도하는 것이 좋습니다. –

관련 문제