由于新的遗留错误,Rails服务器无法启动

时间:2012-09-08 20:46:44

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

当我尝试启动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行,那么效果很好,

有什么想法吗?

4 个答案:

答案 0 :(得分:10)

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

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

显然,代理人应该优雅地处理这个案子,我们将在接下来的一两天内修补。我们刚刚完成了代理配置的重大重构,在我们的内部测试中错过了这个边缘案例。

etoleb在评论中提供了一个很好的解决方法。我们非常抱歉让你头疼。

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

谢谢!

答案 1 :(得分:3)

此问题似乎与您的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"] %>

答案 2 :(得分:3)

很高兴看到能够承担责任的人的回复!干得好,New Relic。谢谢,@ samg。

由于问题只是一个零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文件设置一个本地env var,在那里我做了一些其他类似的事情:

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。

派对!

答案 3 :(得分:1)

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