2009-11-02 75 views
3

我使用New Relic for Rails,但只需要New Relic来监控我的一个生产环境。不过,我有一台也在生产模式下运行的登台服务器。 New Relic检测到两者都是我的应用程序的运行产品实例(因为它应该),但是我不想为了监视两个实例而付费,因为我只想关注它。Rails - 基于主机名向插件提供许可证密钥

New Relic的接受许可密钥的环境变量:

license_key: <%= ENV['NEWRELIC_ACCOUNT_KEY'] %> 

是否可以检测环境中的文件的主机名(即配置/环境/ production.rb),这样我可以定义这个环境动态变量?

这两个环境都是从同一个Git仓库,相同的源代码库部署的,所以我不能在每个部署的代码中真正更改它 - 最好能够以某种方式动态定义环境变量。

任何想法,将不胜感激!谢谢!

+0

想要选择一个答案? – 2009-12-08 22:32:29

回答

4

的New Relic的Ruby的代理将解析newrelic.yml配置文件作为ERB解析之前它作为YAML。因此,你可以做很多巧妙的技巧,如:

production: 
    license_key: <%= Socket.gethostname == 'mission-critical.example.com' ? 'PAID_ACCOUNT_LICENSE_KEY' : 'FREE_LITE_ACCOUNT_LICENSE_KEY' %> 

这解析所有发生在应用程序启动时间。

如果您的RAILS_ENV与在“生产模式”下运行的分段服务器中的“生产”不同,那么您可以使用Steve Graham建议的环境部分。

+0

感谢您的回复并提醒我回到这个问题。我实际上最终做了一件非常相似的事情,增加了一个条件来检查文件系统中是否存在一个目录,尽管你也可以检查'hostname'命令的输出或类似的识别信息。欣赏输入! – shedd 2012-01-09 23:09:27

0

主机名只能在请求对象中使用,所以不,在rails生成环境时不可用。

我只是设置你的staging部署脚本来将production.rb复制到staging.rb并在“分段”中启动应用程序。另一种技术是不把newrelic.yml保存在scm中,而是将它从其他地方复制或链接到当前的部署目录。

2

您是否为分段创建了单独的环境?即开发,测试,生产和分期? See here的说明...

已经这样做了,我们可以在config/newrelic.yml

common: &default_settings 
    license_key: 'PASTE_YOUR_KEY_HERE' 
    … 

development: 
    enabled: false 
    … 

test: 
    enabled: false 
    … 

production: 
    enabled: true 
    … 

staging: 
    enabled: false 
    … 

对于环境的指定行为等,等

+0

史蒂夫,谢谢你的见解。我没有意识到你可以在newrelic yml文件中指定环境。有趣的是,当我问New Relic对这个问题的支持时,他们也没有提到这个问题。我会给这个旋转,看看它是如何工作的。谢谢! – shedd 2009-12-09 20:28:46