2016-12-07 1 views
1

Я пытаюсь установить мой Bluemix VCAP_SERVICES environment variable локально, но я получаю эту ошибку в терминале:Установить локальную переменную окружения Bluemix VCAP_SERVICES локально, чтобы я мог локально развиваться?

NoSQL: команда не найдена

Действия по воспроизведению

  1. Войти в Bluemix.net
  2. Развернуть a hello world flask application
  3. свяжите Bluemix Cloudant служба приложению
  4. Копирование в VCAP_SERVICES Переменные среды от переменных выполнения/среды по применению для Python
  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. Сохранить файл и выйти vi с :wq!

  10. Источник измененный файл с . ~/.bash_profile установить окно терминала с новой VCAP переменной окружения

Что я делаю неправильно копирование и установка моего локального Bluemix VCAP_Services Переменная среды?

Если я копирую все это, я получаю ошибки, что линия слишком длинная. Как я могу легко скопировать и вставить весь образ Bluemix Python Runtime VCAP_SERVICES Переменная в мои локальные настройки среды Mac .bash_profile без ручной обработки JSON и всех этих разрывов строк и т. Д.?

Я не хочу использовать локальный файл для хранения, поскольку он не очень безопасен, поскольку я перехожу от разработчика, тестирования, постановки и производства.

+0

я улучшил форматирование вашего вопроса, чтобы сделать его более удобным для чтения. Пожалуйста, просмотрите документацию по форматированию Stack Overflow в [справочном центре] (https://stackoverflow.com/help/formatting), чтобы вы могли сделать это самостоятельно в следующий раз. Обратите внимание, что в блоках кода внутри списка должны быть отступы четыре пробела для каждого уровня списка плюс дополнительные четыре пробела для указания блока кода. Я также переместил часть вашего заявления о проблеме перед вашими шагами, чтобы воспроизвести для лучшего контекста. Удачи! – Chris

+0

Спасибо Крису за изменения –

ответ

2

Я выяснил использование ответа одиночных кавычки в начале и конце VCAP_SERVICES

VCAP_SERVICES = '{ "cloudantNoSQLDB": [{ "полномочие ": {" 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_ создано»,„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() 
2

Это анти-шаблон для создания переменной env VCAP_SERVICES локально. Я предлагаю использовать информацию о подключении только при локальном запуске.

Вариант 1

if 'VCAP_SERVICES' in os.environ: 
    services = json.loads(os.getenv('VCAP_SERVICES')) 
    cloudant_url = services['cloudantNoSQLDB'][0]['credentials']['url'] 
else: 
    cloudant_url = "https://fakeURLc-bluemix:fakeab96175c-bluemix.cloudant.com" 

Вариант 2

Если вы не хотите, чтобы жёстко учетные данные в код, то вы можете создать файл .env:

export LOCAL_CLOUDANT_URL=https://fakeURLc-bluemix:fakeab96175c-bluemix.cloudant.com 

и в вашем код python:

if 'VCAP_SERVICES' in os.environ: 
    services = json.loads(os.getenv('VCAP_SERVICES')) 
    cloudant_url = services['cloudantNoSQLDB'][0]['credentials']['url'] 
else: 
    cloudant_url = os.environ['LOCAL_CLOUDANT_URL'] 

, а затем source .env перед запуском приложения.

Обязательно добавьте .env к .gitignore и .cfignore

+0

Привет, у меня уже есть код python для чтения переменной среды VCAP_Services. Моя проблема заключается в настройке vi ~/.bash_profile после копирования из значка копирования среды воспроизведения Runtime Runtime Bluemix на панели управления или выполнения cf env myapp. Я понял, что мне нужно добавить одну цитату в начале и в конце. –

2

Существует КФ CLI плагин, который будет получить VCAP_SERVICES из своего приложения и помочь вам установить его локально. Я использовал его на своем Mac и не должен был корректировать котировки вообще.

заказ https://github.com/jthomas/copyenv

Смежные вопросы