¹ØÓÚ¸ÃÓ¦ÓóÌÐò
¸ÃÓ¦ÓóÌÐòÊÇÔÚ IBM Bluemix ÉÏʹÓà Python¡¢Django
ºÍ MongoDB£¨×÷ΪÊý¾Ý»º´æ£©½øÐпª·¢µÄ¡£Ç°¶ËÊÇʹÓà JavaScript ÖÆÍ¼ÒýÇæ Highcharts
Ëù¹«¿ªµÄÖÆÍ¼ API À´Éè¼ÆµÄ¡£Highcharts »¹Ö§³ÖÓû§´òӡͼ±í£¬»òÕßÒÔͼÏñ»ò PDF ¸ñʽÏÂÔØËüÃÇ¡£Django
ÊÇÒ»¸ö»ùÓÚ Python µÄ¿ªÔ´ Web Ó¦ÓóÌÐò¿ò¼Ü£¬Ëü¹ÄÀø¿ìËÙ¿ª·¢ Web Ó¦ÓóÌÐò£¬ÈÃÓû§Äܹ»±àд¸É¾»¡¢ÈÝÒ×ά»¤µÄ´úÂ롣һЩʹÓÃ
Django µÄÖøÃûÕ¾µã°üÀ¨ Pinterest¡¢Instagram¡¢Mozilla¡¢The Washington
Times¡¢Disqus ºÍ Public Broadcasting Service¡£
ÈκÎʱºòÔÚ¸ÃÓ¦ÓóÌÐòÖвéѯÈκÎͳ¼ÆÊý¾Ý»òÖ¸±ê£¨±ÈÈçÃÀ¹úµÄÌ«ÑôÄÜÏûºÄ£©£¬¶¼½«´Ó
World Bank REST API ץȡÓë¸ÃÖ¸±ê¹ØÁªµÄ JSON Êý¾Ý£¬²¢Ê¹Óà PyMongo »á»°½«ÕâЩÊý¾Ý´æ´¢ÔÚ
MongoDB ¼¯ºÏÖС£´ËÊý¾Ý½«»áÔÚ MongoDB Öлº´æÒ»Ìì¡£¶ÔÓÚѰÕÒÏàͬͳ¼ÆÊý¾ÝµÄ²éѯ£¬¿ÉÒÔ´Ó MongoDB
»º´æÖÐÀÈ¡¸ÃÊý¾ÝÀ´½øÐд¦Àí£¬ÎÞÐè²éѯ World Bank API¡£Êý¾Ý»º´æÃ¿ÌìË¢ÐÂÒ»´Î£¬²¢ÔÙ´ÎÌîÈë¶ÔÓ¦ÓóÌÐòµÄµÚÒ»´Îµ÷ÓõĽá¹û¡£
ÔÚ±¾ÎĵÄ×îºóÒ»²¿·ÖÖУ¬ÎÒ½«½éÉÜÈçºÎÇáËɵؽ«¸ÃÓ¦ÓóÌÐò²¿Êðµ½ Bluemix
£¬Bluemix ÊÇ IBM ÓÃÀ´¹¹½¨¡¢¹ÜÀíºÍÔËÐÐÓ¦ÓóÌÐòºÍ·þÎñµÄ¿ª·Å±ê×¼¡¢»ùÓÚÔÆµÄƽ̨¡£
ÎÒÃÇ¿ªÊ¼¹¹½¨Õâ¸öÖÆÍ¼Ó¦ÓóÌÐò°É£¡
¹¹½¨Õâ¸öÓ¦ÓóÌÐòÐèÒª×öµÄ×¼±¸¹¤×÷
1.Ò»¸ö IBM Bluemix ÕÊ»§
2.¶ÔÒÔÏÂ֪ʶÓлù±¾µÄÁ˽⣺
Python ±à³ÌÓïÑÔ
Django Web ¿ò¼Ü
MongoDB ºÍ PyMongo °ü×°Æ÷
Cloud Foundry (cf) ÃüÁîÐй¤¾ß
JavaScript ºÍ JQuery
Èç¹ûÏëÒª½«Ó¦ÓóÌÐòÖ±½Ó²¿Êðµ½ Bluemix£¬²»ÏëÔÚ±¾µØ½øÐпª·¢£¬ÄÇôÄú¿ÉÒÔÌø¹ý´Ë´¦µÄµÚ
1-3 ²½£¬Ö±½ÓÖ´ÐÐ µÚ 4 ²½¡£½«Ó¦ÓóÌÐò²¿Êðµ½ Bluemix¡£Äú¿ÉÒÔʹÓÃÒÔÏÂÃüÁî´Ó IBM JazzHub
´æ´¢¿â¿Ë¡Դ´úÂ룺
git clone https://hub.jazz.net/git/mamtasharma/trendsapp001 |
Ò²¿ÉÒÔµ¥»÷ÉÏÃæµÄ»ñÈ¡´úÂë°´Å¥£¬Ê¹Óà DevOps Services ÔÚÏßä¯ÀÀÍêÕûµÄ´úÂë¡£ÓйظôúÂëµÄÏêϸ½âÊÍ£¬Çë²Î¼û
µÚ 3 ²½¡£´´½¨ºÍÅäÖñ¾ÎĵÄÖÆÍ¼Ó¦ÓóÌÐò¡£
µÚ 1 ²½. ÉèÖÃÒ»¸ö Django ÏîÄ¿
°²×° Python ºÍ Django¡£¶ÔÓÚ±¾µØÉèÖã¬È·±£ÄúÔÚ°²×° Django ֮ǰÒѾ°²×°ÁË Python¡£
´´½¨Ò»¸ö Django ÏîÄ¿¡£Django ÖеÄÏîÄ¿ÊÇÒ»¸ö Django ʵÀýµÄÉèÖü¯ºÏ£¬°üÀ¨Êý¾Ý¿âÅäÖá¢Ìض¨ÓÚ
Django µÄÑ¡ÏÒÔ¼°Ìض¨ÓÚÓ¦ÓóÌÐòµÄÉèÖá£Òª´´½¨Ò»¸ö Django ÏîÄ¿£¬ÇëÔËÐÐÒÔÏÂÃüÁ
django-admin.py startproject trends_app |
startproject ÃüÁî´´½¨Ò»¸öÃûΪ trends_app µÄĿ¼£¬ÆäÖаüº¬ 5 ¸öÎļþ¡£ÕâЩÎļþ£¨ÒÑÔÚÏÂÃæÁгö£©Òѹ¹³ÉÒ»¸öÄÜÕý³£ÔËÐеÄ
Django Ó¦ÓóÌÐò¡£
trends_app/ manage.py trends_app/ __init__.py settings.py urls.py wsgi.py |
Èç¹û·Ç³£ÊìϤ Django£¬ÄÇôÄú¿ÉÒÔÌø¹ýÕâЩÎļþµÄÒÔÏÂϸ½Ú¡£Èç¹û²»ÊìϤ Django£¬ÒÔϼò¶ÌÃèÊöÓ¦¸Ã¿É°ïÖúÄú»ù±¾Àí½âÕâЩÎļþµÄÓÃ;¡£
trends_app/£ºÍⲿµÄ trends_app/ Ŀ¼ÀàËÆÓÚ Django ÏîÄ¿µÄÒ»¸öÈÝÆ÷¡£
manage.py£ºÕâ¸öÃüÁîÐÐʵÓóÌÐòÔÊÐíÄúÓë Django ÏîÄ¿½»»¥¡£¼üÈë python manage.py
»áµÃµ½Ò»¸ö¿ÉÓÃÃüÁîÁÐ±í¡£
trends_app/trends_app/£ºÄÚ²¿µÄ trends_app/trends_app Ŀ¼ÊÇÄúÏîĿʵ¼ÊµÄ
Python °ü¡£ËüµÄÃû³ÆÊÇÄúµ¼ÈëÆäÖеÄÈκÎÄÚÈÝʱÐèҪʹÓÃµÄ Python °üÃû³Æ£¬ÀýÈç import
trends_app.settings¡£
__init__.py£ºPython ÐèÒªÕâ¸öÎļþÀ´½« trends_app/ Ŀ¼µ±×÷Ò»¸ö°ü£¨Ò»×é
Python Ä£¿é£©½øÐд¦Àí¡£
settings.py£ºÕâ¸ö Django ÏîÄ¿µÄÉèÖÃ/ÅäÖá£
urls.py£ºÕâ¸ö Django ÏîÄ¿µÄ URL¡£¿É½«´ËÊÓΪÄúÊÜ Django Ö§³ÖµÄÕ¾µãµÄ ¡°Ä¿Â¼¡±¡£
wsgi.py£º¼æÈÝ WSGI µÄ Web ·þÎñÆ÷´¦ÀíÄúµÄÏîÄ¿µÄÈë¿Úµã¡£
µÚ 2 ²½. Æô¶¯¿ª·¢·þÎñÆ÷
Django ÓÐÒ»¸öÄÚÖõÄÇáÁ¿ÐÍ¿ª·¢ Web ·þÎñÆ÷£¬Ëü»áÔÚ¶ÔÔ´´úÂëÖ´ÐÐÈκθü¸Äʱ×Ô¶¯ÖØÐ¼ÓÔØ¡£
ÒªÆô¶¯¸Ã·þÎñÆ÷£¬¿ÉÒÔ¸ü¸Äµ½ÄúÏîÄ¿µÄÈÝÆ÷Ŀ¼ (cd trends_app) ²¢ÔËÐдËÃüÁ
python manage.py runserver |
Èç¹û¿´µ½ÒÔÏÂÏûÏ¢£¬ÔòÒâζ×Å·þÎñÆ÷ÒÑÔÚ±¾µØµÄ 8000 ¶Ë¿ÚÉÏÆô¶¯¡£
Validating models...
0 errors found
August 25, 2014 - 21:51:25
Django version 1.6.5, using settings 'trends_app.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK. |
ʹÓÃÄúµÄ Web ä¯ÀÀÆ÷·ÃÎÊ http://127.0.0.1:8000/£¬Äú»á¿´µ½ÄúµÄµÚÒ»¸ö
Django Ò³Ãæ¡£ µÚÒ»¸öÊÜ django Ö§³ÖµÄÒ³Ãæ

µÚ 3 ²½. ´´½¨ºÍÅäÖÃÕâ¸öÖÆÍ¼Ó¦ÓóÌÐò
ʹÓÃÒÔÏÂÃüÁî´´½¨Ò»¸öʾÀý Django Ó¦ÓóÌÐò£¬Õâ»á´´½¨Ò»¸öÃûΪ trends µÄ Django Ó¦ÓóÌÐò¡£
django-admin.py startapp trends |
ÐÞ¸Ä settings.py ÎļþÒÔʹÓÃÒÔÏ´úÂ룺
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', trends, ) |
ÏÖÔÚ£¬ÅäÖà URL Ó³Éä¡£¸ÃÓ³É乿¶¨ÁËÄúÈçºÎ·ÃÎÊÄúµÄÓ¦ÓóÌÐò¡£ÏÂÃæÕâ¸ö´úÂëÇåµ¥ÏÔʾÁË trends_app/urls.py
ÎļþÓ¦ÓеÄÄÚÈÝ£º
from django.conf.urls import include, url
urlpatterns = [ url(r'^trends/', include('trends.urls')) ]
|
¸ü¸Ä trends/urls.py Îļþ£¬Ê¹Ö®°üº¬½« URL fetch_and_draw_data/
Ó³Éäµ½ fetch_and_draw_data() ÊÓͼº¯ÊýµÄ´úÂ룬ÈçÏÂÃæÕâ¸ö´úÂëÇåµ¥Ëùʾ¡£trends/urls.py
Îļþ½«Ò»¸ö URL Ó³Éäµ½Ò»¸öÊÓͼº¯Êý£¬ÒÔ±ã Django ÖªµÀÔںδ¦ÕÒµ½ÊÓͼº¯Êý¡£
urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^fetch_and_draw_data/', views.fetch_and_draw_data, name='fetch_and_draw_data'), ] |
½«ÏÂÃæÕâ¸öÃûΪ fetch_and_draw_data() µÄÊÓͼº¯Êý°üº¬ÔÚ trends/views.py
ÎļþÖС£trends/views.py Îļþ°üº¬½ÓÊÜÒ»¸öÇëÇó²ÎÊý²¢·µ»ØÒ»¸öÏìÓ¦µÄ Python º¯Êý¡£ÕâÀïµÄÇëÇóͨ³£ÊÇÀ´×Ô
Web ·þÎñÆ÷µÄÇëÇó£¬ÊÓͼ»á»ñÈ¡ÔÚ´ËÇëÇóÖд«µÝµÄËùÓвÎÊý¡£È»ºó£¬ÊÓͼ»áÖ´ÐбØÒªµÄÂß¼À´È·¶¨ºÏÊʵÄÏìÓ¦¡£
def fetch_and_draw_data(request): connect.initialize() country = request.GET.get('country', 'USA') metric = request.GET.get('metric', 'Total')
country_code = countries_mapping[country]
indicator_code = indicators_mapping[metric]
data_url = get_url(country_code, indicator_code)
json_from_cache = connect.get_json_data(data_url)
...
//create a data list
data_list = {"graphTitle": graphTitle
,"xAxisLabels" : xAxisLabels,
"xAxisTitle" : xAxisTitle, "yAxisTitle"
: yAxisTitle, "yAxisValues" : yAxisValues}
return HttpResponse(simplejson.dumps(data_list)) |
´´½¨Ò»¸öÃûΪ trends/connect.py µÄÐÂÎļþ²¢½« initialize() º¯ÊýÌí¼Óµ½ÆäÖС£trends/connect.py
Îļþ¸ºÔð½¨Á¢Óë MongoDB µÄÁ¬½Ó¡£¸ÃÁ¬½ÓÊÇʹÓà PyMongo ½¨Á¢µÄ£¨ÕâÊÇ MongoDB µÄÒ»¸ö
Python ½Ó¿Ú£©²¢Í¨¹ýµ÷Óà initialize() º¯ÊýÀ´ÔÚ MongoDB ÖнøÐгõʼ»¯¡£
ÏÂÃæÕâ¶Î´úÂëչʾÁËÈçºÎʹÓÃ´Ó Bluemix VCAP_SERVICE ±äÁ¿»ñÈ¡µÄÁ¬½Óƾ¾Ý½¨Á¢Ò»¸ö PyMongo
»á»°£¨¼ÙÉèÄúÒÑÓÐÒ»¸ö MongoDB ·þÎñʵÀýÔÚ Bluemix ÉÏÔËÐУ©¡£
# Initialize MongoDB connection with credentials from vcap config def initialize(): # If connection is not initialized, initialize it. if not config.initialized: #Get the connection credentials from VCAP variables vcap_config = os.environ.get('VCAP_SERVICES') decoded_config = json.loads(vcap_config) for key, value in decoded_config.iteritems(): if key.startswith('mongodb'): mongo_creds = decoded_config[key][0]['credentials'] mongo_url = str(mongo_creds['url'])
client = pymongo.MongoClient(mongo_url)
config.db = config.client['db']
config.collection = config.db['mycollection']
config.collection.remove({})
config.initialized=True
refresh() |
½« refresh() º¯ÊýÌí¼Óµ½ trends/connect.py ÎļþÖС£refresh() º¯Êý»áÔÚÖ´ÐÐ
initialize() º¯Êýʱµ÷Óá£ÕâÊÇÒ»¸ö¶¨ÆÚÈÎÎñ£¬Ã¿¸ô 24 СʱִÐÐÒ»´Î£¬²¢»áÇåÀí MongoDB
¼¯ºÏÖеÄÏÖÓÐÊý¾Ý£¬ÒÔ±ã¶Ô¸ÃÓ¦ÓóÌÐòµÄÏÂÒ»´Îµ÷Óûá´Ó World Bank REST URL ץȡÊý¾Ý¡£
# Periodic task to purge data from MongoDB collection def refresh(): config.collection.remove({}) threading.Timer(86400, refresh).start() |
½« get_url() º¯ÊýÌí¼Óµ½ trends/views.py ÎļþÖС£get_url() º¯Êý»á»ñÈ¡¹ú¼Ò´úÂëºÍÖ¸±êÃû³Æ£¨ÀýÈçÌ«ÑôÄÜÏûºÄ£©£¬Ê¹ÓÃËüÃÇ×÷ΪÇëÇó²ÎÊý£¬²¢¹¹ÔìÒ»¸ö
API URL£¬ÈçÒÔÏ´úÂëÇåµ¥Ëùʾ£º
def get_url(country_code, indicators): return ("http://api.worldbank.org/countries/%s/indicators/%s?per_page=10&\ date=2000:2010&format=json" % (country_code, indicators)) ; |
½« get_json_data() º¯ÊýÌí¼Óµ½ trends/connect.py ÎļþÖС£Õâ¸öº¯Êý»á¼ì²é¸Ã
URL ÊÇ·ñÒÑ´æÔÚÓÚ MongoDB ¼¯ºÏÖС£Èç¹ûδÕÒµ½Õë¶Ô¸Ã URL µÄÌõÄ¿£¬ÄÇôËü»áµ÷Óà API URL
À´¼ìË÷ JSON ¸ñʽµÄÊý¾Ý£¬È»ºó½«¸ÃÊý¾Ý»º´æÔÚ MongoDB ¼¯ºÏÖС£Èç¹ûÕÒµ½Á˸ÃÌõÄ¿£¬ÄÇôËü»á·µ»ØÓëÏÖÓÐ
URL ¶ÔÓ¦µÄ»º´æÊý¾Ý¡£
ÏÂÃæÕâ¸ö´úÂëÇåµ¥ÏÔʾÁËÈçºÎͨ¹ýµ÷Óà get_json_data() º¯ÊýÀ´×¥È¡ºÍ»º´æÊý¾Ý¡£
# Hit the World Bank url to retrieve data def get_json_data(data_url): # If data is in cache, return it if(config.collection.find_one({"url": data_url}) is not None): return config.collection.find_one({"url": data_url})["jsonData"] # Fetch it from MongoDB otherwise else: response = urllib2.urlopen (data_url) jsonData = simplejson.load(response) config.collection.insert({'url': data_url, 'jsonData' : jsonData}) return jsonData |
ÔÚ trends_app Ŀ¼ÖÐÌí¼ÓÒ»¸öÃûΪ templates µÄĿ¼¡£È»ºó£¬ÔÚ templates
Ŀ¼ÖУ¬Ìí¼ÓÒ»¸öÃûΪ index.html µÄÎļþ£¨ÏîÄ¿ÖÐΩһµÄÄ£°å£©£¬²¢½« Highcharts JS
¿âµ¼ÈëÆäÖС£Highcharts JS ÊÇÒ»¸ö JavaScript ÖÆÍ¼ÒýÇæ£¬ÒÔ½»»¥Ê½Í¼±íÐÎʽ³ÊÏÖÊý¾ÝµÄÁé»î·½·¨ºÍ¼òµ¥·½·¨Ê¹µÃ
Highcharts JS µÃÒÔÖøÃû¡£
ÏÂÃæÕâ¸ö´úÂëÇåµ¥ÏÔʾÁË Highcharts µ¼Èë´úÂ룺
# Import highchart javascript <script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js"></script> |
½« JavaScript fetch_and_draw() º¯ÊýÌí¼Óµ½ index.html ÎļþÖС£Õâ¸öº¯Êý¶Ôºó¶Ë
fetch_and_draw_data ÊÓͼº¯ÊýÖ´ÐÐÒ»´Î Ajax µ÷Óã¬ÈçÏÂÃæÕâ¸ö´úÂëÇåµ¥Ëùʾ¡£
$.ajax({ url : "/trends/fetch_and_draw_data", type : "GET", dataType: "json", data : { csrfmiddlewaretoken: '{{ csrf_token }}', country : country, metric : metric }, |
´ÓÑ¡Ï²Ëµ¥Ñ¡ÔñÒ»¸öÖ¸±ê»ò´ÓÏÂÀ²Ëµ¥Ñ¡ÔñÒ»¸ö¹ú¼Òºó£¬½«»á¼ìË÷ tab_id ²¢µ÷Óà fetch_and_draw()
º¯Êý£¬¸Ãº¯Êý½ø¶ø¶Ô fetch_and_draw_data URL Ö´ÐÐÒ»´Î Ajax µ÷Ó㬴Ӻó¶Ë»ñÈ¡Êý¾Ý¡£×îºó£¬Ê¹ÓÃ
Highcharts À´³ÊÏÖÖ±·½Í¼¡£ÏÂÃæÕâ¶Î´úÂëÏÔʾÁË¶Ô JavaScript º¯Êý fetch_and_draw()
µÄµ÷Óãº
$('#tabs').tabs({ activate: function(event ,ui){ var tab_id = ($("#tabs").tabs('option', 'active')); tab_id += 1; fetch_and_draw(tab_id); } });
$('#countries_id').change(function() { var tab_id = ($("#tabs").tabs('option', 'active')); tab_id += 1; fetch_and_draw(tab_id); }); |
Äú¿ÉÒÔÔÚ JazzHub ÉÏ¿´µ½ views.py ºÍ index.html ÎļþµÄÍêÕû´úÂë¡£
µÚ 4 ²½. ½«Ó¦ÓóÌÐò²¿Êðµ½ Bluemix
ÔÚ±àдӦÓóÌÐò´úÂëºó£¬ÊÇʱºò½«Ëü²¿Êðµ½ Bluemix ÁË¡£
½« requirement.txt ÎļþÌí¼ÓÄúÏîÄ¿µÄ¸ùĿ¼Ï¡£requirement.txt ÎļþÓ¦°üº¬ÔËÐиÃÖÆÍ¼Ó¦ÓóÌÐòËùÐèµÄËùÓÐÍⲿÒÀÀµÏ±ÈÈç
Django ºÍ PyMongo£©¡£ÔËÐÐÓ¦ÓóÌÐòʱ£¬Bluemix »áÈ·±£¶ÁÈ¡ÁË´ËÎļþ²¢°²×°ÁËÁгöµÄÒÀÀµÏî¡£
´ËÏîÄ¿ÐèÒªµÄ requirement.txt ÎļþÊÇ£º
Django==1.6.5 pymongo==2.7.1 |
ÔÚÏîÄ¿µÄ¸ùĿ¼Ï´´½¨ run.sh Îļþ¡£run.sh ÎļþÊÇÔڸà Web Ó¦ÓóÌÐò²¿Êðµ½ Bluemix
ÉÏÖ®ºóÆô¶¯ËüµÄ shell ½Å±¾¡£ÔÚÆô¶¯ Web ·þÎñÆ÷ʱ£¬ÇëÈ·±£Äú´Ó»·¾³±äÁ¿ VCAP_APP_PORT
ÖлñµÃÁ˶˿ÚÖµ¡£
½«ÒÔÏÂÐÐÌí¼Óµ½ run.sh ÎļþÖС£
#!/bin/bash if [ -z "$VCAP_APP_PORT" ]; then SERVER_PORT=5000; else SERVER_PORT="$VCAP_APP_PORT"; fi echo port is $SERVER_PORT python manage.py runserver --noreload 0.0.0.0:$SERVER_PORT |
ÏÂÔØ²¢°²×° Cloud Foundry (cf) ÃüÁîÐй¤¾ß£¬¸Ã¹¤¾ß½«ÓÃÓÚÉÏ´«ºÍ¹ÜÀíÓ¦ÓóÌÐò¡£ÒªÑéÖ¤
Cloud Foundry ÊÇ·ñÒѳɹ¦°²×°£¬¿ÉÒÔÔËÐÐÒÔÏÂÃüÁîÀ´·µ»Ø°æ±¾ºÅ£º
µÇ¼µ½ Bluemix ²¢ÉèÖö˵㡣¿ÉÒÔÔËÐÐÒÔÏÂÃüÁîÀ´´Ó CLI µÇ¼µ½ Bluemix£º
cf login -a https://api.ng.bluemix.net |
½«Ó¦ÓóÌÐòÍÆË͵½ Bluemix¡£×ªµ½ÄúÏîÄ¿µÄ¸ùĿ¼ (trends_app/)£¬²¢ÔËÐÐÒÔÏÂÃüÁî½«ÖÆÍ¼Ó¦ÓóÌÐòÉÏ´«µ½
Bluemix£º
cf push trendsapp001 --no-manifest --no-start -b https://github.com/cloudfoundry/python-buildpack -c "sh run.sh" |
--no-start Ñ¡ÏîָʾӦÓóÌÐòÖ»ÓÐÔڰ󶨵½ÐèÒªµÄ·þÎñºó²ÅÓ¦Æô¶¯¡£Õâ¿ÉÒÔÈ·±£ÔÚÓ¦ÓóÌÐòÆô¶¯Ö®Ç°£¬MongoDB
·þÎñÒѰ󶨵½¸ÃÓ¦ÓóÌÐò¡£
-c Ñ¡ÏîÓÃÓÚÖ¸¶¨ÔÚÆô¶¯Ó¦ÓóÌÐòʱ Bluemix Ó¦Ö´ÐÐµÄÆô¶¯ÃüÁî¡£
-b ±ê־ָʾҪʹÓõĹ¹¼þ°ü¡£¶ÔÓÚÕâ¸öÖÆÍ¼Ó¦ÓóÌÐò£¬ÎÒÃÇÐèÒªÒ»¸ö Python ÔËÐÐʱ£¬¿ÉÒÔͨ¹ýʹÓÃ
-b Ñ¡ÏîÏò Git ´æ´¢¿â´«µÝ Python ¹¹¼þ°üµÄ URL (https://github.com/cloudfoundry/python-buildpack)
À´»ñÈ¡Ëü¡£
Ò²¿ÉÒÔÔÚ manifest.yml ÅäÖÃÎļþÖÐÌṩӦÓóÌÐòÃû³Æ¡¢¹¹¼þ°üÐÅÏ¢ºÍ sh run.sh ÃüÁÈçÏÂËùʾ£º
applications: - name: trendsapp001 memory: 256M command: sh run.sh buildpack: https://github.com/cloudfoundry/python-buildpack |
½« manifest.yml Îļþ°üº¬ÔÚÏîÄ¿¸ùÖС£ÔÚʹÓà manifest.yml Îļþʱ£¬Ê¹ÓÃÒÔÏÂÃüÁ¸ÃÓ¦ÓóÌÐòÍÆË͵½
Bluemix£º
Çë¼ÇסѡÔñÒ»¸ö²»Í¬µÄÖ÷»úÃû£¬ÕâÑùÄú×îÖÕµÄ URL ·ÓɾͲ»»áÓëÑÝʾ URL ·¢Éú³åÍ»¡£½«ÖÆÍ¼Ó¦ÓóÌÐòÍÆË͵½
Bluemix ʱ£¬Äú»á¿´µ½Ò»¸öÀàËÆÏÂͼµÄÆÁÄ»¡£

¡®cf push¡¯ ÃüÁîµÄÊä³öµÄÆÁÄ»½ØÍ¼
´´½¨ MongoDB ·þÎñµÄÒ»¸öʵÀý¡£ÔÚÖÕ¶ËÖУ¬×ªµ½ÏîÄ¿¸ùĿ¼£¬¼üÈëÒÔÏÂÃüÁîÀ´Ê¹ÓÃÒ»¸öΩһÃû³Æ´´½¨Ò»¸ö
MongoDB ·þÎñʵÀý£º
cf create-service mongodb 100 mongodb001 |
¼üÈëÒÔÏÂÃüÁ½«¸Ã MongoDB ·þÎñʵÀý°ó¶¨µ½ÐÂÓ¦ÓóÌÐò£¬ÔÚÎÒÃǵÄÀý×ÓÖÐΪ trendsapp001£º
cf bind-service trendsapp001 mongodb001 |
ÄúÒ²¿ÉÒԵǼµ½ Bluemix ¹ÜÀí¿ØÖÆÌ¨²¢ÔÚ APPS ²Ëµ¥ÏÂÕÒµ½ÖÆÍ¼Ó¦ÓóÌÐò£¬ÒÔÕâÖÖ·½Ê½´´½¨Ò»¸ö
MongoDB ·þÎñʵÀý¡£

Bluemix ÒDZí°å - Ó¦ÓóÌÐòÇåµ¥
Ñ¡ÔñÄúµÄÓ¦ÓóÌÐò£¬ÔÚ½á¹ûÒ³ÃæÉÏ£¬Ê¹Óà Add Service Ñ¡Ï MongoDB
·þÎñÌí¼Óµ½ÄúµÄÓ¦ÓóÌÐòÖС£
Bluemix ÒDZí°åµÄÆÁÄ»½ØÍ¼ - Ìí¼Ó
MongoDB ×÷Ϊ·þÎñ
ÄúÏÖÔÚÓ¦ÔÚ Bluemix ¹ÜÀíÒDZí°åÉÏ¿´µ½Ò»¸ö°ó¶¨µ½ÄúÓ¦ÓóÌÐòµÄ MongoDB
·þÎñʵÀý¡£

Bluemix ÒDZí°åµÄÆÁÄ»½ØÍ¼ - Áгö°ó¶¨µÄ·þÎñ
½« MongoDB ·þÎñʵÀý°ó¶¨µ½Ó¦ÓóÌÐòºó£¬ÒÔÏÂÅäÖûáÌí¼Óµ½ÄúµÄ VCAP_SERVICES »·¾³±äÁ¿ÖУº

Bluemix ÒDZí°å - »·¾³±äÁ¿
ÔËÐÐÒÔÏÂÃüÁîÀ´Æô¶¯¸ÃÓ¦ÓóÌÐò
ͨ¹ý·ÃÎÊ trendsapp001.mybluemix.net/trends
À´·ÃÎÊÄúµÄÖÆÍ¼Ó¦ÓóÌÐò£¨½« trendsapp001 Ìæ»»ÎªÄúÔÚ manifest.yml ÎļþÖÐÌṩµÄΩһÖ÷»úÃû£©¡£ÁíÍ⣬¿ÉÒÔµ¥»÷±¾ÎÄ¿ªÍ·µÄ
Run the app °´Å¥À´³¢ÊÔʵʱÑÝʾ¸ÃÓ¦ÓóÌÐò¡£
ÏÂÃæÕâ¸öÆÁÄ»½ØÍ¼ÏÔʾÁËÓ¦ÓóÌÐòÖÐÏÔʾµÄÃÀ¹úµÄÌ«ÑôÄÜÏûºÄÇé¿öͼ±í¡£Äú¿ÉÒÔµ¥»÷ÆÁÄ»ÓÒ²àµÄ²Ëµ¥£¬´òÓ¡¸Ãͼ±í»òÒÔͼÏñ»ò
PDF ¸ñʽÏÂÔØËü¡£

ÆÁÄ»½ØÍ¼ - ÄÜÔ´ÏûºÄÒDZí°å
½áÊøÓï
±¾ÎÄÑÝʾÁËÈçºÎ´´½¨ Django Ó¦ÓóÌÐò²¢½«Ëü²¿ÊðÔÚ Bluemix ƽ̨ÉÏ¡£ÎÒ»¹½éÉÜÁËʹÓà Bluemix
MongoDB ·þÎñ×÷ΪÊý¾Ý»º´æºÍ½«ËüÓë Django ¿ò¼Ü¼¯³ÉµÄÏêϸÐÅÏ¢¡£±¾ÎÄÖÐÌṩµÄÖÆÍ¼Ó¦ÓóÌÐòµÄÔ´´úÂë¿ÉÒÔ´ÓÆä
JazzHub ´æ´¢¿âÏÂÔØ£¬Äú»¹¿ÉÒÔÏÂÔØÕý³£ÔËÐÐËüËùÐèµÄËùÓÐÅäÖÃÎļþ¡£ÔÚ¹¹½¨Õâ¸öÖÆÍ¼Ó¦ÓóÌÐòºó£¬ÄúÏÖÔÚÓ¦Äܹ»½«¸Ã¹ý³ÌÓ¦Óõ½×Ô¼ºµÄÏîÄ¿ÖС£ÄúÓµÓÐÎÞÏ޵ĿÉÄÜ£¡
|