在python/flask/gunicorn/heroku堆栈上,我需要根据另一个环境变量的内容设置一个环境变量。
作为背景,我在 heroku 上运行一个 python/Flask 应用程序。我通过包含凭据和 url 的环境变量与插件进行通信。我用来与插件通信的库需要这些数据,但需要不同的格式。此外,它需要它作为环境变量。
到目前为止,我已经手动克隆并重新格式化了环境变量,但这只会带来灾难,因为附加组件提供商正在更改密码。
好的,所以我需要在库开始查找之前自动读取一个环境变量并设置另一个环境变量。
我尝试过的天真的方法是(文件app.py):
app = Flask(__name__, ...)
env_in = os.environ['ADDON_ENV_VAR']
os.environ['LIB_ENV_VAR'] = some_processing(env_in)
...
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000')
Run Code Online (Sandbox Code Playgroud)
python app.py在进行调试时效果很好,但在通过gunicorn app:app -b '0.0.0.0:5000'(作为Procfilefor foreman)运行以部署真正的网络服务器时会失败。在第二种情况下,环境变量似乎没有达到操作系统级别。我不确定 wsgi 是如何工作的,但一旦 Gunicorn 开始运行应用程序,环境可能会发生变化。
我该怎么做才能将环境变量设置在需要的地方?
我在 CentOS 上。我已经用 yum 安装了 foreman
在我的主目录中,没有 Procfile,我得到:
$ foreman start
ERROR: Procfile does not exist.
Run Code Online (Sandbox Code Playgroud)
但是,当我 cd 进入具有 Procfile 的目录时,例如:
cd ~/supersender
Run Code Online (Sandbox Code Playgroud)
然后 foreman 命令不可用,即forem [tab][[tab]未完成,我得到
$ foreman start
-bash: foreman: command not found
Run Code Online (Sandbox Code Playgroud) 我有一个在 Heroku 上运行的 node.js Web 服务器,它将签署和验证 JSON Web 令牌。我生成了一个 RSA 公钥和私钥,它们看起来像这样:
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAz7pZEypvrFJCDshsbOamj9bmy/dXnUOyCo5b3xSvvTNIoFAC
5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZOl8bFBlqV9k30oerMtVei18+CfF/u
FLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+ZqhEx/TShp3JudUWuRW8ALqrBd8QW5
CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLWo8iINnAovXmvcAtdmzgIqoucD988
f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN8IYPlnb5IB6Z7qnVL6rZz44dAjVw
S3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrXVwIDAQABAoIBAC8HHCVnpRKZKNVZ
8JoS+cB0wZmJrK8w5TzYj9oIP+UQmC+bDZzoISiT0j5ogFXeXWs68JO5pbHg72hO
LvBUpiRcXryag3rYmTqTArdHWNmM5BiuSyMrIHFE3ka1dAcdew8ZcT1rVQNeH1Mk
DLnDe3fqLaPVM2o7XLlTJfxklP+WN6xWhBgDVgEawneo5svdgblYhg3u7cb4fsHg
cAf0sCYraVuqcUHa/AUVOx7n5U39x3ShOvOQvFlWEDD6uN4Yg/twW2UyfFDWD57p
2oPIEf06wOOu2XylPQwEU9w92Fr4yNqk0xksn8sOjbRyEPZncpDICsPTo1nsrz+R
0AcwWUkCgYEA7DfUujbbg6WrfSOyS718kTeej0Il5z19JYu11g+Sis4r8RWbT92q
weCp4dCGCpJrsPbs4+s4hT42sKfjUcUy5ZCGTDturQNbhH0RGxPp1KUTrytzdph8
4mqpCVYcN1AmLCCA0WtFqJ53taWuipcLtU48ZRC4jHI+stUSNCtaE8UCgYEA4R+6
x5mUjOWAK8GSTgHMWa72KqaxR/osYwmMPtHtjIFm1aOElQaXbGlZKd3dR5Tnw/4R
8hO/gJc+eQeaPGhri0IVmG66JNTw8q0M0Qd+l0OrarYS5c09XzjAUdGOatstsaNE
rhgRG90HvVYt0cHyKRa/C4+CnEBod/EoS/UnhGsCgYB5wT1Qzj3PWXFPCzs3du/i
Gf0Mclf/HN6In76WG2i5SxOzLCPlwqflTtvBnS25/Uas7FmmEPQNGcguvhqZZz+Y
vCm82VVusDBX1e8fOeBozr2aqJbXJjoYqkl+mnfoutMyI37Ccrxw8V1ar4+Lt9c9
GJpgrYGyQqC2pMTBRyci0QKBgHxc9uXE5ddgAQorCROm0qjIipzNMSo9/b9ISv15
Iu13nsNubZOV7JirKeKC+fbNP6t585fzaNs0sgJSPNYaKS7o9t0abiJisCifiHEA
3uHZNBzjMFVaqAiuZS/NwAsvwXJca1hxWyI1XE0wCmfR6GDie+96/AAtZIi95DDx
4T65AoGBAIE5LSP+glxJEd8jU/qc80D/dXf6icURyYDGARw8mziAgw6fL9cwbmqb
IGDxP1ke2FA8OZ0W4VybRi9UcprenvADYpPb+CPZv4gxGoDFg0Bb/JcFUKL29hC1
steX0GR4TKYNeXLC+zz7Qr0DzhpqRswSyHG5GckkIRdgHx4l/Uza
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz7pZEypvrFJCDshsbOam
j9bmy/dXnUOyCo5b3xSvvTNIoFAC5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZO
l8bFBlqV9k30oerMtVei18+CfF/uFLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+Zq
hEx/TShp3JudUWuRW8ALqrBd8QW5CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLW
o8iINnAovXmvcAtdmzgIqoucD988f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN
8IYPlnb5IB6Z7qnVL6rZz44dAjVwS3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrX
VwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
(请注意,这些是为本示例生成的,未在任何实时系统中使用)
当通过 fs 模块加载密钥(PEM 文件)并传递给jsonwebtoken 库时,签名和验证按预期完美工作:
var fs = require('fs');
var jwt = require('jsonwebtoken');
var privateKey = fs.readFileSync('private_key.pem'); …Run Code Online (Sandbox Code Playgroud) 我有一个ruby应用程序,取决于我已经构建的几个Web服务.
为了一起开始,我有以下Procfile:
mondodb: /home/dwaynemac/mongodb/bin/mongod
accounts: ./script/start_accounts.sh
contacts: ./script/start_contacts.sh
activity: ./script/start_activity_stream.sh
web: ./script/start.sh
Run Code Online (Sandbox Code Playgroud)
每个start_xxx.sh脚本都执行以下操作:
cd ../activity_stream; bundle exec unicorn -p 3003 -c ./config/unicorn.rb
Run Code Online (Sandbox Code Playgroud)
如果我手动运行这些前一行,activity_stream运行正常.但是当从工头跑出来时,一些宝石是不被认可的.好像捆绑包没有正确构建.
示例错误:
activity_stream/config/boot.rb:2:in `require': no such file to load -- grape (LoadError)
Run Code Online (Sandbox Code Playgroud) 我正在使用Yeoman/bower/grunt构建一个角度应用程序.该应用程序在领班完美运行.在我搜索堆栈上的类似问题时,大多数其他人只是忘记创建他们的Procfile或者在运行应用程序的app.js中出错.但我有这两个,我无法弄清楚他们有什么问题,所以工头工作而不是heroku.当我部署到heroku并打开它时,我在日志中得到了这个:
2013-10-02T19:33:56.159151+00:00 heroku[api]: Deploy b417d22 by richardadavila@gmail.com
2013-10-02T19:33:56.202052+00:00 heroku[api]: Release v10 created by richardadavila@gmail.com
2013-10-02T20:38:51.350572+00:00 heroku[web.1]: Idling
2013-10-02T20:38:57.626159+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2013-10-02T20:39:02.097317+00:00 heroku[web.1]: State changed from up to down
2013-10-02T20:39:02.079612+00:00 heroku[web.1]: Process exited with status 143
2013-10-02T22:00:00.360769+00:00 heroku[web.1]: Unidling
2013-10-02T22:00:00.361135+00:00 heroku[web.1]: State changed from down to starting
2013-10-02T22:00:04.049439+00:00 heroku[web.1]: Starting process with command `node app.js`
2013-10-02T22:00:06.128657+00:00 app[web.1]: server started 40741
2013-10-02T22:00:06.164522+00:00 heroku[web.1]: State changed from starting to up
2013-10-02T22:00:07.479644+00:00 heroku[router]: at=info method=GET path=/ host=rickydavila-kpopbetter-s.herokuapp.com fwd="71.144.19.194" dyno=web.1 connect=9ms …Run Code Online (Sandbox Code Playgroud) 这就是我的目录结构(我只包括相关部分):
my_git_root/
??? Procfile
??? README.md
??? requirements.txt
??? my_django_project
??? app1
? ??? admin.py
? ??? __init__.py
? ??? models.py
? ??? tests.py
? ??? urls.py
? ??? views.py
??? fabfile.py
??? app2
? ??? __init__.py
? ??? models.py
? ??? templates
? ??? tests.py
? ??? views.py
??? manage.py
??? my_django_project
??? __init__.py
??? settings
? ??? base.py
? ??? __init__.py
? ??? local.py
? ??? production.py
? ??? staging.py
??? static
??? urls.py
??? wsgi.py
Run Code Online (Sandbox Code Playgroud)
我正在使用Foreman运行我的Rails 4应用程序,并且得到重复的输出。Web显示与Log几乎相同的信息。
我可以运行领班并只隐藏Web输出吗?

我的procfile:
web: bundle exec passenger start -p $PORT --max-pool-size 3
log: tail -f ./log/development.log
Run Code Online (Sandbox Code Playgroud) 这就是我的意思Procfile:
web: gunicorn --pythonpath meraki meraki.wsgi
Run Code Online (Sandbox Code Playgroud)
当我这样做时foreman start,我收到此错误:
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
Run Code Online (Sandbox Code Playgroud)
据我所知,在追溯中,原因是:
ImportError: No module named wsgi
Run Code Online (Sandbox Code Playgroud)
我import wsgi在shell中做了导入成功,没有错误.
为什么我不能开始foreman?
项目结构:
meraki
meraki
//other apps
meraki
settings
__init__.py
celery.py
views.py
wsgi.py
manage.py
Procfile
requirements
requirements.txt
Run Code Online (Sandbox Code Playgroud) 我试图从命令行运行时遇到上述错误foreman start.
我安装了宝石:
gem install foreman
Run Code Online (Sandbox Code Playgroud)
然后定义了一个procfile.为什么我收到此错误?当我运行工头列表时,我得到:
Available commands:
build Commission Forman to build a new Laravel app for you
help Displays help for a command
list Lists commands
scaffold Generate a scaffolded Foreman template file
self-update Updates the application.
Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个新的Rails API应用程序,我试图第一次运行它.我安装了foreman gem,我使用命令
foreman start
Run Code Online (Sandbox Code Playgroud)
启动服务器,但我得到这些错误:
Exiting
21:52:55 web.1 |
/Users/AM/Documents/RailsWS/app1229/config/initializers/wrap_parameters.rb:8:in
`block in <top (required)>':
undefined method `wrap_parameters' for ActionController::API:Class (NoMethodError)
21:52:55 web.1 |
from /Users/AM/.rvm/gems/ruby-1.9.3-p194-gemset/gems/activesupport-
3.2.8/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
21:52:55 web.1 |
from /Users/AM/.rvm/gems/ruby-1.9.3-p194-gemset/gems/activesupport-
3.2.8/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
21:52:55 web.1 |
from /Users/AM/.rvm/gems/ruby-1.9.3-p194-gemset/gems/activesupport-
3.2.8/lib/active_support/lazy_load_hooks.rb:26:in `block in on_lo
..........
Run Code Online (Sandbox Code Playgroud)
我已经尝试更新gemset并重新设置终端等.
然而,没有任何工作.想知道是否有人可以就如何继续诊断此错误的来源提出想法
谢谢
编辑以下是ApplicationController.rb的内容
class ApplicationController < ActionController::API
include ActionController::MimeResponds
include ActionController::ImplicitRender
end
Run Code Online (Sandbox Code Playgroud)
的Gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.8'
gem 'rails-api'
gem 'pg'
gem 'thin'
gem 'foreman'
gem 'rabl'
gem "paperclip"
gem 'aws-sdk'
group :development …Run Code Online (Sandbox Code Playgroud)