Skip to main content
 首页 » 编程设计

python之在本地设置 Bluemix VCAP_SERVICES 环境变量以便我可以在本地进行开发

2025年05月04日15jirigala

我正在尝试设置我的 Bluemix VCAP_SERVICES environment variable在本地,但我在终端中收到此错误:

NoSQL: command not found

重现步骤

  1. 登录到 Bluemix.net
  2. 部署 hello world flask application
  3. 将 Bluemix Cloudant 服务绑定(bind)到应用程序
  4. 从 Python 应用程序的运行时/环境变量中复制 VCAP_SERVICES 环境变量
  5. 在本地编辑器中删除 Mac 终端上的所有换行符
  6. vi ~/.bash_profile
  7. 使用i进入插入模式
  8. 粘贴VCAPSERVICES,我的是这样的:

    VCAP_SERVICES="{"VCAP_SERVICES":{"cloudantNoSQLDB": [{"credentials": {"host": "fakehostc-bluemix.cloudant.com","password":"fakepassword4da6de3a12a83362b26a","port": 443,"url": "https://fakeURLc-bluemix:fakeab96175c-bluemix.cloudant.com","username": "fakeusername-b749-399cfbd1175c-bluemix"},"label":"cloudantNoSQLDB","name":"Cloudant NoSQL DB-p2","plan":"Lite","provider":null,"syslog_drain_url":null,"tags":["data_management","ibm_created","ibm_dedicated_public"]}]}}" 
    export VCAP_SERVICES 
    
  9. 保存文件并使用 :wq!

  10. 退出 vi
  11. 使用 获取修改后的文件。 ~/.bash_profile 使用新的 VCAP 环境变量设置终端窗口

我在复制和设置本地 Bluemix VCAP_Services 环境变量时做错了什么?

如果我复制整个内容,我会收到行太长的错误。我如何轻松地将整个 Bluemix Python 运行时 VCAP_SERVICES 变量复制并粘贴到我的本地 Mac .bash_profile 环境设置中,而无需手动处理 JSON 和所有这些换行符等?

我不想使用本地文件来存储这些文件,因为当我从开发、测试、暂存和生产转移时,它不是很安全。

请您参考如下方法:

我想出了在 VCAP_SERVICES 的开头和结尾使用单引号的答案

VCAP_SERVICES='{"cloudantNoSQLDB": [{"credentials": {"host": "fakehostc-bluemix.cloudant.com","password":"fakepassword4da6de3a12a83362b26a","port": 443,"url": "https://fakeURLc-bluemix:fakeab96175c-bluemix.cloudant.com","username": "fakeusername-b749-399cfbd1175c-bluemix"},"label":"cloudantNoSQLDB","name":"Cloudant NoSQL DB-p2","plan":"Lite","provider":null,"syslog_drain_url":null,"tags":["data_management","ibm_created","ibm_dedicated_public"]}]}'

以下是检索 VCAP 服务环境变量并在 Cloudant 上执行基本操作的相应代码:

# 1. Parse VCAP_SERVICES Variable and connect to DB          
vcap = json.loads(os.getenv("VCAP_SERVICES"))['cloudantNoSQLDB']         
serviceUsername = vcap[0]['credentials']['username'] 
servicePassword = vcap[0]['credentials']['password']     
serviceURL = vcap[0]['credentials']['url'] 
 
# Create Cloudant DB connection 
# This is the name of the database we are working with. 
databaseName = "databasedemo" 
 
# This is a simple collection of data, 
# to store within the database. 
sampleData = [ 
    [1, "one", "boiling", 100], 
    [2, "two", "hot", 40], 
    [3, "three", "warm", 20], 
    [4, "four", "cold", 10], 
    [5, "five", "freezing", 0] 
] 
 
# Use the Cloudant library to create a Cloudant client. 
client = Cloudant(serviceUsername, servicePassword, url=serviceURL) 
 
# Connect to the server 
client.connect() 
 
# 2.  Creating a database within the service instance. 
 
# Create an instance of the database. 
myDatabaseDemo = client.create_database(databaseName) 
 
# Check that the database now exists. 
if myDatabaseDemo.exists(): 
    print "'{0}' successfully created.\n".format(databaseName) 
 
# 3.  Storing a small collection of data as documents within the database. 
 
# Create documents using the sample data. 
# Go through each row in the array 
for document in sampleData: 
    # Retrieve the fields in each row. 
    number = document[0] 
    name = document[1] 
    description = document[2] 
    temperature = document[3] 
 
    # Create a JSON document that represents 
    # all the data in the row. 
    jsonDocument = { 
        "numberField": number, 
        "nameField": name, 
        "descriptionField": description, 
        "temperatureField": temperature 
    } 
 
    # Create a document using the Database API. 
    newDocument = myDatabaseDemo.create_document(jsonDocument) 
 
    # Check that the document exists in the database. 
    if newDocument.exists(): 
        print "Document '{0}' successfully created.".format(number) 
 
# 4.  Retrieving a complete list of the documents. 
 
# Simple and minimal retrieval of the first 
# document in the database. 
result_collection = Result(myDatabaseDemo.all_docs) 
print "Retrieved minimal document:\n{0}\n".format(result_collection[0]) 
 
# Simple and full retrieval of the first 
# document in the database. 
result_collection = Result(myDatabaseDemo.all_docs, include_docs=True) 
print "Retrieved full document:\n{0}\n".format(result_collection[0]) 
 
# Use a Cloudant API endpoint to retrieve 
# all the documents in the database, 
# including their content. 
 
# Define the end point and parameters 
end_point = '{0}/{1}'.format(serviceURL, databaseName + "/_all_docs") 
params = {'include_docs': 'true'} 
 
# Issue the request 
response = client.r_session.get(end_point, params=params) 
 
# Display the response content 
print "{0}\n".format(response.json()) 
 
# 5.  Deleting the database. 
 
# Delete the test database. 
try : 
    client.delete_database(databaseName) 
except CloudantException: 
    print "There was a problem deleting '{0}'.\n".format(databaseName) 
else: 
    print "'{0}' successfully deleted.\n".format(databaseName) 
 
# 6.  Closing the connection to the service instance. 
 
# Disconnect from the server 
client.disconnect()