Heroku + Rack App + Часовые пояса активной поддержки - PullRequest
1 голос
/ 01 марта 2012

У меня есть довольно простое приложение Rack, которое определено в файле с именем config.ru:

require './environment'

 class Ryan
   def self.call(env)
    [200, { "Content-Type" => "text/html" }, [Time.zone.now]]
   end
 end

 run Ryan

В environment.rb, вот что:

require 'active_support/core_ext/time/zones'
require 'active_support/time_with_zone'
require 'active_support/core_ext/time/conversions'

Time.zone = 'Sydney'

И в Gemfile:

source "http://rubygems.org"

gem 'rack'
gem 'tzinfo'
gem 'activesupport'

Когда я запускаю это локально, это работает!Огромный успех.

Однако, когда я развернул это приложение в Heroku, оно полностью провалилось с этим показом в журналах:

2012-03-01T02:01:55+00:00 app[web.1]: [2012-03-01 02:01:55] INFO  ruby 1.9.2 (2011-07-09) [x86_64-linux]
2012-03-01T02:01:55+00:00 app[web.1]: [2012-03-01 02:01:55] INFO  WEBrick 1.3.1
2012-03-01T02:01:55+00:00 app[web.1]: [2012-03-01 02:01:55] INFO  WEBrick::HTTPServer#start: pid=1 port=27368
2012-03-01T02:01:56+00:00 heroku[web.1]: State changed from starting to up
2012-03-01T02:01:57+00:00 app[web.1]: [2012-03-01 02:01:57] ERROR NoMethodError: undefined method `now' for nil:NilClass
2012-03-01T02:01:57+00:00 app[web.1]:   /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:in `service'
2012-03-01T02:01:57+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
2012-03-01T02:01:57+00:00 app[web.1]:   /app/config.ru:8:in `call'
2012-03-01T02:01:57+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
2012-03-01T02:01:57+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

Итак ... что здесь за дело?Heroku запускает это в другом процессе, и поэтому его нельзя найти?

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Это будет работать с Тонким вместо WEBrick.

Добавьте Тонкий камень к вашему Gemfile, затем создайте Procfile:

web: bundle exec thin start -p $PORT

Это сработалодля меня в стеке кедра.

Что касается того, почему он работает с Тонким, а не с WEBrick: У меня нет подсказки!

http://ryan -cedar.herokuapp.com/

0 голосов
/ 01 марта 2012

Странно, это не работает для меня локально, Ruby 1.9.2p180 и gems,

i18n (0.6.0) 
multi_json (1.1.0) 
activesupport (3.2.1) 
rack (1.4.1) 
tzinfo (0.3.31) 
bundler (1.0.18) 

Это так,

  require './environment'

  class Ryan
    def self.call(env)
      Time.zone = "Sydney"
      [200, { "Content-Type" => "text/html" }, [Time.zone.now.to_s]]
    end
  end

  run Ryan

Дополнительная информация о вашей локальной среде может потерятьсвет о том, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...