Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Dotcloud(Python)上设置NewRelic环境_Python_Dotcloud_Newrelic - Fatal编程技术网

在Dotcloud(Python)上设置NewRelic环境

在Dotcloud(Python)上设置NewRelic环境,python,dotcloud,newrelic,Python,Dotcloud,Newrelic,我有一个Python应用程序,它是使用dotcloud.yml文件中的new Relic配置变量设置的,运行良好 但是,我希望运行一个沙盒实例作为测试/登台环境,因此我希望能够设置newrelic代理的环境,以便它使用ini配置的不同配置部分。My dotcloud.yml的设置如下: www: type: python config: python_version: 'v2.7' enable_newrelic: True environ

我有一个Python应用程序,它是使用dotcloud.yml文件中的new Relic配置变量设置的,运行良好

但是,我希望运行一个沙盒实例作为测试/登台环境,因此我希望能够设置newrelic代理的环境,以便它使用ini配置的不同配置部分。My dotcloud.yml的设置如下:

www:
    type: python
    config:
        python_version: 'v2.7'
        enable_newrelic: True
    environment:
        NEW_RELIC_LICENSE_KEY: *****************************************
        NEW_RELIC_APP_NAME: Application Name
        NEW_RELIC_LOG: /var/log/supervisor/newrelic.log
        NEW_RELIC_LOG_LEVEL: info
        NEW_RELIC_CONFIG_FILE: /home/dotcloud/current/newrelic.ini 
我有自定义的环境变量,因此sanbox设置为“test”,而live应用程序设置为“production”

然后在我的uswsgi.py中调用以下内容

NEWRELIC_CONFIG = os.environ.get('NEW_RELIC_CONFIG_FILE')
ENVIRONMENT = os.environ.get('MY_ENVIRONMENT', 'test')

newrelic.agent.initialize(NEWRELIC_CONFIG, ENVIRONMENT)
但是,dotcloud实例已经启用了newrelic,因为我在uwsgi.log文件中得到了以下信息:

Sun Nov 18 18:50:12 2012 - unable to load app 0 (mountpoint='') (callable not found or import error)
Traceback (most recent call last):
  File "/home/dotcloud/current/wsgi.py", line 15, in <module>
    newrelic.agent.initialize(NEWRELIC_CONFIG, ENVIRONMENT)
  File "/opt/ve/2.7/local/lib/python2.7/site-packages/newrelic-1.8.0.13/newrelic/config.py", line 1414, in initialize
    log_file, log_level)
  File "/opt/ve/2.7/local/lib/python2.7/site-packages/newrelic-1.8.0.13/newrelic/config.py", line 340, in _load_configuration
    'environment "%s".' % (_config_file, _environment))
newrelic.api.exceptions.ConfigurationError: Configuration has already been done against differing configuration file or environment. Prior configuration file used was "/home/dotcloud/current/newrelic.ini" and environment "None".
Sun 11月18日18:50:12 2012-无法加载应用程序0(装入点=“”)(未找到可调用或导入错误)
回溯(最近一次呼叫最后一次):
文件“/home/dotcloud/current/wsgi.py”,第15行,在
初始化(newrelic_配置,环境)
文件“/opt/ve/2.7/local/lib/python2.7/site packages/newrelic-1.8.0.13/newrelic/config.py”,第1414行,在初始化中
日志文件,日志级别)
文件“/opt/ve/2.7/local/lib/python2.7/site packages/newrelic-1.8.0.13/newrelic/config.py”,第340行,在加载配置中
“环境“%s”。”(\u配置文件,\u环境))
newrelic.api.exceptions.ConfigurationError:已针对不同的配置文件或环境进行了配置。以前使用的配置文件是“/home/dotcloud/current/newrelic.ini”和环境“None”。
因此,似乎在调用uwsgi.py之前,newrelic代理已初始化

所以我的问题是:


有没有办法初始化newrelic环境?

除非他们做了一些奇怪的事情,否则您应该能够通过执行以下操作覆盖代理配置文件提供的应用程序名称:

import newrelic.agent
newrelic.agent.global_settings().app_name = 'Test Application Name'
不要再次调用newrelic.agent.initialize()


这仅在app_name列出要向其报告数据的单个应用程序时才有效。

最简单的方法是,在不更改任何代码的情况下执行以下操作

$ dotcloud env set \
'NEW_RELIC_APP_NAME="Test Application Name"' \
'NEW_RELIC_LOG_LEVEL=debug'
在dotCloud上创建新的沙盒应用程序(有关在沙盒模式下创建应用程序的更多信息,请参阅)

现在,您应该在live和sandbox应用程序中运行相同的代码。但是,因为您想更改沙盒应用程序的一些环境变量,所以还需要执行一个步骤

根据本页,有两种不同的添加环境变量的方法

  • 使用
    dotcloud.yml
    的环境部分
  • 使用
    dotcloud env
    cli命令
  • dotcloud.yml允许您为每个服务定义不同的环境变量,而dotcloud env则为整个应用程序设置环境变量。此外,使用dotcloud env设置的环境变量将取代dotcloud.yml中定义的环境变量

    这意味着,如果我们想为我们的沙盒应用程序设置不同的值,我们只需要运行
    dotcloud env
    命令在沙盒应用程序上设置这些变量,这将覆盖您的
    dotcloud.yml

    如果我们只想改变变量,我们将运行这个命令

    $ dotcloud env set NEW_RELIC_APP_NAME='Test Application Name'
    
    如果我们想一次更新多个,那么我们将执行以下操作

    $ dotcloud env set \
    'NEW_RELIC_APP_NAME="Test Application Name"' \
    'NEW_RELIC_LOG_LEVEL=debug'
    
    要确保正确设置了环境变量,可以运行以下命令

    $ dotcloud env list
    
    注释

    • 上面的命令使用的是新的dotCloud 0.9.x CLI,如果使用的是旧的,则需要升级到新的,或者参考旧CLI的文档
    • 当您设置环境变量时,它将重新启动应用程序,以便安装这些变量,因此为了限制停机时间,请在一个命令中设置所有变量

    谢谢你,肯。这将为我提供不同的应用程序名称(目前已足够),但如果您希望能够设置其他特定于New Relic的配置(可能在测试中关闭浏览器监控或在live中关闭参数捕获)每个环境都需要不同的配置文件。@MarkUnsworth除非我错了,否则我认为所有这些参数都可以从环境变量设置。我认为您甚至可以通过env变量指定一个不同的ini文件来使用。但格雷厄姆·邓普尔顿最清楚。谢谢你,肯。我采取了为每个环境添加单独ini文件的方法。不过,如果能够基于DotCloud环境变量覆盖newrelic环境就好了,因此我们只需要维护1个配置文件。我会为此提出一张支持票。非常有效,谢谢。如果您需要使用
    newrelic admin runprogram…
    运行服务器,并且无法动态设置环境变量,这也很好。
    $ dotcloud env list