我有一个非常简单的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是否在不同的过程中运行它,这就是为什么它找不到?
答案 0 :(得分:0)
很奇怪,这不适合我在当地, Ruby 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
有关当地环境的更多信息可能会说明为何会发生这种情况。
答案 1 :(得分:0)
这适用于Thin而不是WEBrick。
将Thin gem添加到Gemfile
,然后创建Procfile
:
web: bundle exec thin start -p $PORT
它在雪松堆上为我工作。
至于为什么它适用于Thin而不是WEBrick:我没有线索!