我有一个Python应用程序,它使用dotcloud.yml文件中的新New Relic配置变量进行设置,工作正常。
但是我想将沙盒实例作为测试/暂存环境运行,因此我希望能够设置newrelic代理的环境,以便它使用ini配置的不同配置部分。我的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”,实时应用程序设置为“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".
所以看起来在调用uwsgi.py之前初始化newrelic代理。
所以我的问题是:
有没有办法初始化新的环境?
答案 0 :(得分:1)
除非他们做了一些奇怪的事情,否则你应该能够覆盖代理配置文件提供的app_name:
import newrelic.agent
newrelic.agent.global_settings().app_name = 'Test Application Name'
不要再次调用newrelic.agent.initialize()。
这仅在app_name列出单个应用程序以向其报告数据时才有效。
答案 1 :(得分:1)
最简单的方法是在不更改任何代码的情况下执行此操作。
在dotCloud上创建一个新的沙盒应用程序(有关在沙盒模式下创建应用程序的更多信息,请参阅http://docs.dotcloud.com/0.9/guides/flavors/)
$ dotcloud create -f sandbox <app_name>
将代码部署到新的沙盒应用程序。
$ dotcloud push
现在,您应该在实时和沙盒应用中运行相同的代码。但是因为您想要更改沙盒应用程序的某些ENV变量,您需要再做一步。
根据这个页面http://docs.dotcloud.com/0.9/guides/environment/#adding-environment-variables,有两种不同的添加ENV变量的方法。
dotcloud.yml
的环境部分。dotcloud env
cli命令尽管dotcloud.yml允许您为每个服务定义不同的环境变量,但dotcloud env为整个应用程序设置了环境变量。此外,使用dotcloud env设置的环境变量取代了dotcloud.yml中定义的环境变量。
这意味着如果我们想要为沙盒应用程序设置不同的值,我们只需要运行dotcloud env
命令在沙盒应用程序上设置这些变量,这将覆盖{{1}中的变量}
如果我们只想更改变量,我们将运行此命令。
dotcloud.yml
如果我们想要一次更新一次,我们会执行以下操作。
$ dotcloud env set NEW_RELIC_APP_NAME='Test Application Name'
要确保正确设置了env变量,可以运行以下命令。
$ dotcloud env set \
'NEW_RELIC_APP_NAME="Test Application Name"' \
'NEW_RELIC_LOG_LEVEL=debug'
备注强>