【问题标题】:Rails server won't start because of new relic error由于新的遗物错误,Rails 服务器无法启动
【发布时间】:2012-09-02 07:05:42
【问题描述】:

当我尝试启动我的 Rails 服务器时,我收到以下错误:

我正在使用 ruby​​ 1.9.2

 => Booting WEBrick 
 => Rails 3.1.8 application starting in development on http://0.0.0.0:3000
 => Call with -d to detach
 => Ctrl-C to shutdown server
/Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/newrelic_rpm-3.4.2/lib/new_relic/agent/agent.rb:318:in `log_app_names': undefined method `join' for nil:NilClass (NoMethodError)
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/newrelic_rpm-3.4.2/lib/new_relic/agent/agent.rb:439:in `start'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/newrelic_rpm-3.4.2/lib/new_relic/control/instance_methods.rb:95:in `start_agent'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/newrelic_rpm-3.4.2/lib/new_relic/control/instance_methods.rb:83:in `init_plugin'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/newrelic_rpm-3.4.2/lib/newrelic_rpm.rb:36:in `block in <class:Railtie>'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/initializable.rb:30:in `instance_exec'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/initializable.rb:30:in `run'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/initializable.rb:55:in `block in run_initializers'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/initializable.rb:54:in `each'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/initializable.rb:54:in `run_initializers'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/application.rb:96:in `initialize!'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.1.8/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /Users/toptier/Desktop/Proyectos/CursoIngles/config/environment.rb:5:in `<top (required)>'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.8/lib/active_support/dependencies.rb:240:in `require'
from /Users/toptier/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.8/lib/active_support/dependencies.rb:240:in `block in require'

它使用以下 gem:newrelic_rpm (3.4.2)。 如果我在 gemfile 中注释 newrelic 行,效果很好,

有什么想法吗?

【问题讨论】:

  • 我对新版本的新遗物宝石3.4.2有同样的问题。不知道是什么原因造成的,但3.4.1 一切正常。尝试降级 gem 版本。

标签: ruby-on-rails-3.1 ruby-1.9.2 newrelic


【解决方案1】:

我在 New Relic 工作,我们已经找到了问题所在。

nil 明确设置为应用名称时会发生这种情况,这通常发生在从ENV["NEW_RELIC_APP_NAME"] 提取其应用名称的heroku 应用的本地开发中。由于此环境变量通常不会在您的本地开发盒上设置,因此它会作为 nil 进入代理的配置并导致本地服务器崩溃。它不会影响设置此变量的应用程序的部署版本。

显然代理应该优雅地处理这个案例,我们将在接下来的一两天内发布补丁。我们刚刚完成了对代理配置的重大重构,但在我们的内部测试中遗漏了这种极端情况。

etoleb 在评论中提供了一个很好的解决方法。让您头疼,我们深感抱歉。

如果您有任何问题或疑虑,请随时通过 sam@newrelic.com 直接给我发送电子邮件。

谢谢!

【讨论】:

  • 谢谢,伙计们。期待您的补丁来升级新遗物宝石。
  • 我把这个部署到 Heroku。应用程序已部署,但错误显示在部署控制台中。仅供参考
【解决方案2】:

该问题似乎与您的 newrelic 配置中的 app_name 设置为空白有关。我个人经历了 Heroku 安装(所以你的配置可能看起来不同),但这就是我所做的:

config/newrelic.yml(复制自https://gist.github.com/2253296)内我删除了该行

  app_name: <%= ENV["NEW_RELIC_APP_NAME"] %>

common 配置(对我来说是第 35 行)到 production 配置(对我来说是第 247 行之后),最终看起来像

production:
  <<: *default_settings
  monitor_mode: true
  app_name: <%= ENV["NEW_RELIC_APP_NAME"] %>

【讨论】:

    【解决方案3】:

    很高兴看到可以承担责任的人的回复!干得好,新遗物。谢谢,@samg。

    由于问题只是一个 nil env 值,而不是降级 gem 或使用配置文件,我只是添加了环境变量。

    很容易看到heroku上的设置:

    $ heroku config
      ...
    NEW_RELIC_APP_NAME:    my_app_name
    NEW_RELIC_ID:          123456
    NEW_RELIC_LICENSE_KEY: 982987ae987987af98798something7e897987987c7b9d7
    NEW_RELIC_LOG:         stdout
     ...
    

    然后我选择通过我的项目的 .rvmrc 文件设置一个本地环境变量,在那里我做了一些其他类似的事情:

    rvm use ruby-1.9.2-p290@ConTracker --create
    export PATH=bin:$PATH
    export NEW_RELIC_APP_NAME=my_app_name
    

    然后它只需要一个 cd .. 和一个 cd 回到我的项目中,它正在与版本 3.4.2 上的 gem 一起使用。

    开派对!

    【讨论】:

      【解决方案4】:

      感谢您的评论。答案是降级到3.4.1。

      【讨论】:

      • an 答案是降级。 ;] 这里介绍了一些其他选项。我发现为缺少的内容设置一个本地环境变量是最简单的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      相关资源
      最近更新 更多