【问题标题】:Issue with Unicorn Deploy to Heroku - production environment issues onlyUnicorn Deploy to Heroku 的问题 - 仅生产环境问题
【发布时间】:2012-02-16 02:21:36
【问题描述】:

我在部署到 Heroku 时遇到问题。在我的开发机器上一切正常(我正在使用 Foreman/Unicorn 来运行 web worker 和后台 DelayedJob 进程)。但是,当我尝试在 Heroku 上的生产环境中运行时,我收到关于记录器的奇怪错误...

app error: undefined method `tagged' for #<Logger:0x00000005aee368> (NoMethodError)
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/rack/logger.rb:14:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/request_id.rb:22:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/runtime.rb:17:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/lock.rb:15:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/static.rb:53:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.1/lib/rack/cache/context.rb:132:in `forward'
/app/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.1/lib/rack/cache/context.rb:241:in `fetch'
/app/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.1/lib/rack/cache/context.rb:181:in `lookup'
/app/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.1/lib/rack/cache/context.rb:65:in `call!'
/app/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.1/lib/rack/cache/context.rb:50:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/engine.rb:479:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/application.rb:220:in `call'
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/railtie/configurable.rb:30:in `method_missing'
/app/vendor/bundle/ruby/1.9.1/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:530:in `process_client'
/app/vendor/bundle/ruby/1.9.1/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:604:in `worker_loop'
/app/vendor/bundle/ruby/1.9.1/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:487:in `spawn_missing_workers'
/app/vendor/bundle/ruby/1.9.1/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:137:in `start'
/app/vendor/bundle/ruby/1.9.1/gems/unicorn-4.2.0/bin/unicorn:121:in `<top (required)>'
/app/vendor/bundle/ruby/1.9.1/bin/unicorn:19:in `load'
/app/vendor/bundle/ruby/1.9.1/bin/unicorn:19:in `<main>'

令人困惑的部分是错误跟踪都是 gem 代码......也许我的 unicorn / proc 文件有问题?

独角兽:

worker_processes 3 # amount of unicorn workers to spin up
preload_app true
timeout 30         # restarts workers that hang for 30 seconds

@delayedjob_pid = nil

before_fork do |server, worker|
  @delayedjob_pid ||= spawn("bundle exec rake environment jobs:work QUEUE=immediate")
end

after_fork do |server, worker|
  ActiveRecord::Base.establish_connection
end

过程:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

我可以发布任何有用的东西!!!提前谢谢...

【问题讨论】:

    标签: ruby-on-rails deployment heroku production-environment unicorn


    【解决方案1】:

    我不能代表你的发展问题,所以这更像是一个建议而不是一个答案(但它比答案需要更多的空间)。

    过去,我在生产环境中遇到过 Heroku 和服务/gems 的问题。我建议你在 Heroku 上创建一个登台环境并在那里测试你的代码。但是,您应该以两种方式对其进行测试:

    • 一个普通的暂存环境,然后开始......
    • 一一添加heroku服务并测试您的应用程序。

    我曾经在 Relic 上遇到过问题,在 Dev 和 Staging 中一切正常,但生产根本无法正常工作。结果发现由于某种原因,relic 的版本与 Rails 的版本不兼容。

    另外,关于您的问题,您在哪个 Heroku 堆栈上运行?您是在 Cedar 堆栈还是 Bamboo 上运行?

    【讨论】:

    • 感谢您开始回答。我在雪松堆栈上。我的应用程序过去一直在工作,所以我不太确定究竟是什么改变破坏了一切。错误跟踪也无济于事,这就是我在这里的原因!
    • P.S.这是使用 Heroku 进行的“干净”生产安装(未激活任何服务) - 这是我的开发代码直接移植到生产中
    【解决方案2】:

    事实证明 Heroku 目前与 Rails 3.2 和自定义日志记录不兼容。

    解决了我的问题 - 注释掉以下内容:

     #config.log_tags = [:uuid, :remote_ip]
    

    另请参阅 http://broadcastingadam.com/2012/01/rails320_heroku_and_rails_log_stdout

    【讨论】:

    • 很高兴你解决了它。没有什么比单步调试代码的堆栈跟踪来找出它是一个兼容性问题更有趣了:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多