Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
²¿Êð»ùÓÚ World Bank Êý¾ÝµÄÖÆÍ¼Ó¦ÓÃ
 
×÷ÕߣºMamta Sharma À´Ô´£ºIBM ·¢²¼ÓÚ£º2015-7-20
  2173  次浏览      27
 

¹ØÓÚ¸ÃÓ¦ÓóÌÐò

¸ÃÓ¦ÓóÌÐòÊÇÔÚ 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 ÊÇ·ñÒѳɹ¦°²×°£¬¿ÉÒÔÔËÐÐÒÔÏÂÃüÁîÀ´·µ»Ø°æ±¾ºÅ£º

cf --version

µÇ¼µ½ 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£º

cf push  --no-start

Çë¼ÇסѡÔñÒ»¸ö²»Í¬µÄÖ÷»úÃû£¬ÕâÑùÄú×îÖÕµÄ 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í°å - »·¾³±äÁ¿

ÔËÐÐÒÔÏÂÃüÁîÀ´Æô¶¯¸ÃÓ¦ÓóÌÐò

cf start trendsapp001

ͨ¹ý·ÃÎÊ trendsapp001.mybluemix.net/trends À´·ÃÎÊÄúµÄÖÆÍ¼Ó¦ÓóÌÐò£¨½« trendsapp001 Ìæ»»ÎªÄúÔÚ manifest.yml ÎļþÖÐÌṩµÄΩһÖ÷»úÃû£©¡£ÁíÍ⣬¿ÉÒÔµ¥»÷±¾ÎÄ¿ªÍ·µÄ Run the app °´Å¥À´³¢ÊÔʵʱÑÝʾ¸ÃÓ¦ÓóÌÐò¡£

ÏÂÃæÕâ¸öÆÁÄ»½ØÍ¼ÏÔʾÁËÓ¦ÓóÌÐòÖÐÏÔʾµÄÃÀ¹úµÄÌ«ÑôÄÜÏûºÄÇé¿öͼ±í¡£Äú¿ÉÒÔµ¥»÷ÆÁÄ»ÓÒ²àµÄ²Ëµ¥£¬´òÓ¡¸Ãͼ±í»òÒÔͼÏñ»ò PDF ¸ñʽÏÂÔØËü¡£

ÆÁÄ»½ØÍ¼ - ÄÜÔ´ÏûºÄÒDZí°å

½áÊøÓï

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

   
2173 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí