2012-03-01 21 views
1

我有在一个文件中定义一个非常简单的机架应用程序称为config.ru的Heroku +机架式应用+主动支持时区

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' 

所以......有什么dealio这里? Heroku是否在不同的过程中运行它,这就是为什么它不能被发现?

+0

什么Heroku堆栈是这个*不*运行? – jipiboily 2012-03-01 02:29:44

+0

没关系,似乎像香草雪松 – jipiboily 2012-03-01 02:46:28

回答

0

奇怪,这并没有为我在本地运行, 红宝石1.9.2p180和宝石,

 
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 

更多信息可以在一些启发为什么它发生。

+0

红宝石1.9.2(2011-07-09)==红宝石1.9.2p290 AFAIK – jipiboily 2012-03-01 02:47:38

+0

我认为堆栈跟踪是heroku的..不是瑞安的本地 – 2012-03-01 03:12:22

+0

我知道,但我认为他的运行相同一个地方:) – jipiboily 2012-03-01 03:45:08

0

这将使用Thin而不是WEBrick。

添加薄宝石你Gemfile然后创建一个Procfile

web: bundle exec thin start -p $PORT

它为我的雪松堆栈。

至于为什么它可以使用Thin而不是WEBrick:我没有线索!

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