2011-09-27 5 views
3

다음은이 게시물 인 Rails, data structure and performance에 대한 후속 작업으로 여기에 레일스에 카운터 캐시를 만들려고했습니다. 기본값을 0으로 설정하지 않으려면 데이터베이스의 기존 카운트 값으로 열을 업데이트하는 작업을 추가했습니다.heroku에서 마이 그 레이션을 실행할 때의 문제

Running rake db : running on development은 (는) 몇 시간이 걸렸지 만 잘 작동합니다.

그러나 Heroku가와 마이그레이션이 나에게 다음과 같은 오류를주고 실행 : 나는 몇 가지 다른 일을 시도했지만이 시점에서 잃어버린 것 같다

== AddVotesCount: migrating ================================================== 
-- add_column(:options, :votes_count, :integer, {:default=>0}) 
    -> 0.0196s 
/Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `initialize': Operation timed out - connect(2) (Errno::ETIMEDOUT) 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `open' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `block in connect' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `connect' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
    from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:626:in `start' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/resource.rb:51:in `get' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:554:in `process' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:532:in `get' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:290:in `read' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:311:in `each' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/command/run.rb:50:in `rake' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/command.rb:114:in `run' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/bin/heroku:14:in `<top (required)>' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/bin/heroku:19:in `load' 
    from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/bin/heroku:19:in `<main>' 

는, 어떤 도움에 감사드립니다! 이상한 점은 오류 메시지가 항상 즉시 발생하는 것은 아니라는 점입니다. 마이그레이션이 실행되는 것처럼 10 분에서 20 분 정도 걸리는 경우도 있습니다.

감사

업데이트

:

class AddVotesCount < ActiveRecord::Migration 
    def self.up 
    add_column :options, :votes_count, :integer, :default => 0 
    Option.all.each do |option| 
     option.votes_count = option.votes.count 
     option.save! 
    end 
    end 

    def self.down 
    remove_column :options, :votes_count 
    end 
end 

업데이트 2 : 여기 내 마이그레이션 파일의 내용입니다이에게 Heroku와 스테이징 환경에서 작동이 ...하지만 생산

의 후 수정 사항은 거의 없으며 이전 코드는 다음과 같습니다.

def self.up 
    add_column :options, :votes_count, :integer, :default => 0 
    Option.reset_column_information 
    Option.find_each do |option| 
     Option.reset_counters option.id, :votes 
    end 

ROR은 다음과 같은 에러에 직면 할 수 사람들을 위해

== AddVotesCount: migrating ================================================== 
-- add_column(:options, :votes_count, :integer, {:default=>0}) 
-> 0.0224s 
/Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError) 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `open' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `block in connect' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `connect' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
     from /Users/ebellity/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:626:in `start' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/rest-client-1.6.7/lib/restclient/resource.rb:51:in `get' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:554:in `process' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:532:in `get' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:290:in `read' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/client.rb:311:in `each' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/command/run.rb:50:in `rake' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/lib/heroku/command.rb:114:in `run' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/gems/heroku-2.8.4/bin/heroku:14:in `<top (required)>' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/bin/heroku:19:in `load' 
     from /Users/ebellity/.rvm/gems/ruby-1.9.2-p136/bin/heroku:19:in `<main>' 
+0

마이그레이션 파일의 내용은 무엇입니까? – Dogbert

+0

@Dogbert가 마이그레이션 파일을 추가하기 위해 질문을 편집했습니다. – Emmanuel

+0

완벽하게 지원하지만이 마이그레이션이 실제로 필요합니까? Vote.count를 반환하는 Vote_count라는 Option 모델에서 메서드를 만들 수 없습니까? – Yule

답변

2

, 나는 Heroku가 연락을했고 그들은이와 마이그레이션 실행하는 나에게 말했다 : 다음

$ heroku run bash --app appname 

$ rake db:migrate 

어떤 이유로 든 작동 ...

+0

'$ heroku run bash'에 +1. 로컬 터미널에 bash를 달 수 있다는 것을 몰랐습니다. –