ããã«ã¡ã¯ãHabrïŒ
æ°ãããããžã§ã¯ãã®ã¬ãã¥ãŒæçš¿ããããã§ãã ãã®ã¬ãã¥ãŒã¯ãæ©èœãšæè¡çãªéšåã®äž¡æ¹ã«åœ±é¿ãäžããŸããããã«ãããå°éã®éçºè ãšãã¯ãããžãŒã«é ããªãããã«ããç®çã§Habrãèªã人ã®äž¡æ¹ããã®èšäºãèå³æ·±ããã®ã«ã§ããããšãé¡ã£ãŠããŸãã
ãããžã§ã¯ãã®æè¡é¢ã®ã¿ã«é¢å¿ãããå Žåã¯ã 第2éšã«çŽæ¥ã¢ã¯ã»ã¹ããããšããå§ãããŸãã
ããŒã1.ãªãªã«ã«
ç§ãã¡ã¯uid.meå人ããŒãžãµãŒãã¹ã®éçºããŒã ã§ãã
ããšãã°ãå人ããŒãžã¯æ¬¡ã®ããã«ãªããŸãã
![](https://habrastorage.org/getpro/habr/post_images/f7d/545/ab6/f7d545ab6823d8c72cad9dc16a7600a5.png)
http://uid.me/dikaya
![](https://habrastorage.org/getpro/habr/post_images/f54/9f3/805/f549f38055c69f8c3cb7bb1f13a3c226.png)
http://uid.me/pavel_kudinov
ç§ãã¡ã®ãµãŒãã¹ã®è¥¿åŽã®å¯Ÿå¿ã«æ £ããŠããªã人ã¯èªããã¹ãã§ãïŒ uid.meãããžã§ã¯ãã¯ã about.meè±èªãµãŒãã¹ã®ã¯ããŒã³ããŒã«ã©ã€ãºãšããŠæŽå²ãéå§ããŸã
åµé ã®æŽå²
ãããªæãã§ããã ç§ãã¡ãå€åããäŒç€Ÿã®ãŠã§ããµã€ããã«ããŒuCozã¯ã8幎éååšãããŠã§ããã¹ã¿ãŒãäœæãã3500äžãè¶ ãããããã¡ã€ã«ãšããŠã§ããã¹ã¿ãŒãµã€ãããã©ãŒã©ã ãããã°ãäœæããå€æ°ã®èšªåè ãããŒã¿ã»ã³ã¿ãŒã®è žå ã«èç©ããŠããŸãã
ãããã®ãã¹ãŠã®äººã ã¯ãã°ããŒãã«ãªuIDèªèšŒã·ã¹ãã ã«ãã£ãŠçµã°ããŠããŸãã
![](https://habrastorage.org/getpro/habr/post_images/cdd/8f3/991/cdd8f399102ca40fe9a82eaf65dc5ae3.png)
ä»æ¥ãŸã§ãuCozã«ç»é²ããããã¹ãŠã®äººã¯ãã®çš®é¡ã®ãããã¡ã€ã«ãæã£ãŠããŸããã
http://3707164671.uid.me/
![](https://habrastorage.org/getpro/habr/post_images/5e4/755/647/5e4755647c6d0342eaa1f8e36ec3b00f.png)
about.meãããžã§ã¯ãã¯ãåuCozãŠãŒã¶ãŒã®åã ã®ããŒãžã®æ¢åã®æè¯ã®ãããã¿ã€ããšããŠéžã°ããŸãããããã¯ã21äžçŽåé ã®Webäœæ°ã®èªå·±è¡šçŸãšããçŸä»£ã®ãã¬ã³ãã«åã£ãŠãããšèããŠããŸãã
about.meã®å Žåãšåæ§ã«ããŠãŒã¶ãŒã«æ¬¡ã®æ å ±ãæäŸããŸãã
1.ååºãžã®å°å·ã«äœ¿çšã§ããuid.me/name_nameã®åœ¢åŒã®URLã¯ãskypeã®ããŒã ããŒãžãšããŠäœ¿çšã§ããã¡ãã£ã¢ã§èšåãããŠããå ŽåããããŸãã
2.å人ã®åçãåäžã®èŠèŠç»åãé«è§£å床ã®èæ¯ç»åãèªåã«é¢ããåºæ¬æ å ±ïŒäŒèšãé¢å¿ã®ããé åãªã©ïŒã«çµåããæ©èœã
3.ããŒãœãã«ããŒãžã«ãŠããŒã¯ãªå€èŠ³ãšå šäœçãªèŠèŠçäžè²«æ§ããã°ãããšããµã€ãã£ã³ã°ã«äžããããšãã§ãããã¶ã€ããŒã
![](https://habrastorage.org/getpro/habr/post_images/578/c4b/131/578c4b131df6ffcc87b131519a186250.png)
![](https://habrastorage.org/getpro/habr/post_images/199/79c/214/19979c21418336db7991e4d0d1dd7c9b.png)
![](https://habrastorage.org/getpro/habr/post_images/37f/1bc/1f0/37f1bc1f01dedc5bcbec07a1119abc36.png)
![](https://habrastorage.org/getpro/habr/post_images/697/816/e15/697816e15bb174713e250a8297c46702.png)
4.æåŸã«ãæãèå³æ·±ãã®ã¯ãä»æ¥ãç§ãã¡ã®å€ãããœãŒã·ã£ã«ãããã¯ãŒã¯ã«ç©æ¥µçã«åå ããŠããããšã§ãã FacebookãVkontakteã®ãã©ãŒãããã«è¿ã人ãTwitterãInstagramã®ãã€ã¯ãããã°ã«éå®ãããŠãã人ãYoutubeã§èªåã®äººæ°ãã£ã³ãã«ãæã£ãŠãã人ã
ãããŠãããã§ã«ãŒã«ã¯çå®ã§ã-人ãããå€ãã®ç€ŸäŒæŽ»åã瀺ãã»ã©ãããœãŒã·ã£ã«ãããã¯ãŒã¯ã®ã©ãããã¡ã€ã³ããšèŠãªãã¹ããããšãã質åãããæ·±å»ã«ãªããŸãã
uid.meãäžçš®ã®å人çãªãªã³ã©ã€ã³ååºãšããŠäœ¿çšããããšããå§ãããŸãã Googleã®ãµãŒãã¹ã䜿çšãããšãæãäžè¬çãªãœãŒã·ã£ã«ãããã¯ãŒã¯ãèªåã®ãããã¡ã€ã«ã«æ·»ä»ã§ããŸããæ°ãã貎éãªç¥ãåããäœæãããããããã¡ã€ã«ã§skypeãæå®ãããããã©ãŒã©ã ã§çœ²åããããããšãã«ããªã³ã¯ãéžæããå¿ èŠã¯ãããŸããã
æçš¿ããã€ãŒããåçããããã£ãŒã«ã«èªåçã«è¡šç€ºãããäžè¬çãªãã¥ãŒã衚瀺ã«äœ¿çšããããã¹ããªãŒã ãæ©èœãã€ãã³ãã®å ±éãã£ãŒããäœæããçºçãããã¹ãŠãæç³»åé ã«çµåããŸãã
![](https://habrastorage.org/getpro/habr/post_images/5e3/856/625/5e3856625be26ed205f6cbf78e247918.png)
ãšããã§ã uid.meã«å人çšããŒãžãäœæããå Žåã¯ããœãŒã·ã£ã«ãããã¯ãŒã¯ãä»ããèªåç»é²ã䜿çšããããšããå§ãããŸãã ã ãã°ã€ã³ ããã¿ã³ã®ãããããã¯ãªãã¯ãããšãç»é²æ å ±ãå ¥åããã«å人ããŒãžãããã«äœæãããŸãïŒ
![](https://habrastorage.org/getpro/habr/post_images/27d/9d0/759/27d9d0759ab6cd25a3e8e1e68bbefbda.png)
ä»åŸã®å±æãšããŠãè¿ãå°æ¥ãœãŒã·ã£ã«ãããã¯ãŒã¯ãšç·å¯ã«çµ±åããããšã§ããããžã§ã¯ãéçºèšç»ã倧ããå€ãããšèšãããã§ãã
ãã§ã«éçºäžã®uid.meãããã¡ã€ã«ã®2çªç®ã®ããŒãžã§ã³ã¯ããœãŒã·ã£ã«ãããã¯ãŒã¯ããã®æ å ±ããã«ã¹ã¿ãã€ãºå¯èœãªããŒã¿ãã¬ãŒã³ããŒã·ã§ã³ãåããåäžã®ã¹ããªãŒã ã«çµåããæ©èœã«äž»ã«çŠç¹ãåœãŠãŸãã
ããã«ãå人ãæ è¡ãé³æ¥œã®å¥œã¿ãããã³ã·ã¹ãã ããããã¡ã€ã«ããèªåçã«æœåºããŠåŠçã§ãããã®ä»ã®èå³æ·±ãé¢çœãäºå®ã«é¢ããæ å ±ãè¡šããã«ã©ãã«ãªã°ã©ããšãã£ãŒãã®åœ¢åŒã§ããã€ãã®èå³æ·±ãã€ã³ãã©ã°ã©ãã£ãã¯ãŠã£ãžã§ãããéçºããäºå®ã§ãã
ãããã次ã®ããã«ãªããŸãã
![](https://habrastorage.org/getpro/habr/post_images/04d/afc/94c/04dafc94cfa0b7a7ba433a9bb35c7bb4.png)
ããŒã2.æè¡
uCozãŠã£ã³ã°ã®äžã§ââuid.meãéçºããŠãããšãããªãçããç¶æ³ã«é¥ããŸãããäžæ¹ã§ããããžã§ã¯ãã³ãŒãå šäœããŒãããæžãããŠããã¯ãã§ããããäžæ¹ã§ãªãªãŒã¹æ¥ã«ã¯ã2000äžãè¶ ããã€ã³ããŒããæ³å®ãããŠããããããããžã§ã¯ãã¯èªåçã«éè² è·ã«ãªããŸãããããç»é²ã絶察ã«å€ããããã¡ã€ã«ã競äºã«åæ Œããªãã£ããšããäºå®ãèæ ®ã«å ¥ãããããã¡ã€ã«ã
ããã«ãããããããç§ãã¡ã¯ãã¡ãã·ã§ããã«ãªãã¯ãããžãŒã䜿çšããŠãã¹ãŠãçŸããè¡ãããšã決ããæçµçã«å€ãã®çµéšãšæœåšçãªã¬ãã«ã¢ãããåŸãŠãæŠéã§åµå¯ãå®æœããŸããã
以äžãæåã®ã³ã³ããŒãã³ããšããŠéžæãããŸããã
0. Nginxã 圌ãªãã§ã
1.ããã«äœ¿çšã§ããããŒã¿ããŒã¹ã¯ãããŒã¿ãè€æ°ã®ãµãŒããŒã«åæ£ããåé¡ãšãäœããã®çç±ã§ã¯ã©ã¹ã¿ãŒãããµãŒããŒãç©ççã«å€±ãããå Žåã®ãã©ãŒã«ããã¬ã©ã³ã¹ã®åé¡ã解決ããŸãã ãã®èœåã§ã¯ãã¢ã¯ãã£ããªããªããŒã«ãããããããMongoDBãéžæãããŸããã
2.æ©èœçãããã¿ã€ãã³ã°ã®äž»èŠãªãã§ãŒãºãšåŸç¶ã®ãã§ãŒãºãæ倱ãªãå®è¡ã§ããæè»ãªããŒã¿ã¹ããŒã ã MongoDBã¯åã³åœ¹ã«ç«ã¡ãŸããããããã§ã¯äŸ¿å®äžãªãœãŒã¹ãæ¯æãå¿ èŠããã£ãããã ãBSONã¯èŽ æ²¢åã§ããããããšãçŸä»£ã®äº€éæ段ã§ããïŒããšãã質åã«å¯Ÿããäž»ãªåçãåŸãå¿ èŠããããŸãã
MongoDB圢åŒã«å€æãããšãå ã®ãŠãŒã¶ãŒãããã¡ã€ã«ã®mysqlããŒã¿ããŒã¹ã5åã«å¢å ããããšã«æ³šæããŠãã ããã ãã ããåãããã¡ã€ã«ã«ã¯uid.meæ©èœã«é¢é£ããå°è±¡çãªéã®æ°ããããŒã¿ãè¿œå ãããŠãããããæè»ãªBSONããŒã¿ã¹ããŒã ã®å€§é£ãã ãã§ã¯ãããŸããã
3.æ£çŽã«èšããšãåçJSã€ã³ã¿ãŒãã§ãŒã¹ã®ç©æ¥µçãªäœ¿çšã«åããçŸåšã®åŸåïŒããã³ããã·ã³ã³ãŒããžã®åçã³ã³ãã€ã«ã®ããã«æ¢åã®ãã¹ãŠã®ã¹ã¯ãªããèšèªãæ¡éãã«ãã€ãã¹ããV8 Javascriptã®éçºäžã«Googleãšã³ãžãã¢ã«ãã£ãŠè¡ãããæè¡çãã¬ãŒã¯ã¹ã«ãŒã«å¯Ÿããå€å€§ãªæ¬æãèãããšïŒ node.jsã䜿çšããŠJavaScriptã§Webéçºã®èŒªãéãããšåæã«ãããã€ãã®å€ªã£ããã³ãæã«å ¥ãããšããã¯ã¬ã€ãžãŒãªã¢ã€ãã¢...
ãããã圌ãã¯ã 1ã€ã®ãããžã§ã¯ãã1ã€ã®æ°ãããã¯ãããžãŒã§ããããããŸã§ã«MongoDBãååã«ããããšå€æããŸããïŒcïŒAlexander Solovyovã ã¡ãªã¿ã«ã 圌ã®ã¬ããŒããèŠãªãã£ã人ã¯ãããã§ããç§ãã¡ã¯ããŒã å šäœããå§ãããŸãïŒ
ãã®çµæããµãŒããŒãã¯ãããžãŒãšããŠäŒæ¥ã«éŠŽæã¿ã®ããPerlãæ®ãããšã«ããŸãããã2çªç®ã®å®å®é床ãç²åŸãã fast_cgiéåå Žãé¢ãã Mojoliciousãé©çšããŸãã-Mojolicious-ã«ãŒãããã«ããŒãããªããžããã«ãã€ã³ãåããã¢ãã³ã§ã¹ã¿ã³ãã¢ãã³ã§é©åãªïŒèè ãé€ãïŒWebãã¬ãŒã ã¯ãŒã¯çŸä»£ã®éçºè ã«ãã£ãŠèšå®ãããéåæãªã¯ãšã¹ãããã®ä»ã®ãèåã®ãµããŒãã
4.ãœãŒã·ã£ã«ãããã¯ãŒã¯ãšããåããããšãã®å®å šãªéåææ§ãšããŒã¿ãã£ãã·ã³ã°ã
ãããžã§ã¯ãã®ãããã¿ã€ããšããã°ã about.meãµãŒãã¹ãåä¿¡ãããœãŒã·ã£ã«ãããã¯ãŒã¯ããã®ããŒã¿ã¯æŽæ°ãããããµãŒãã¹ã®æ¥ç¶æã«1åã ãèªã¿èŸŒãŸããããšãããããŸããã ãã£ãã·ã¥æŽæ°ãªãã·ã§ã³ã¯ããããVIPãŠãŒã¶ãŒãå©çšã§ããŸããã about.meããabout.meã®æ å ±ãååŸã§ããŸããã§ããã ããã«ãããå°æ¥åæ§ã®åé¡ã®ãªã¹ã¯ãæå°éã«æããããã«ããµãŒããŒééä¿¡ãšãã£ãã·ã¥ã·ã¹ãã ãå¯èœãªéãæŽçããããšãæåã§ãããšããèãã«è³ããŸããã
ã»ãŒæ®éçã«å®è£ ãããOAuth2ãšãããŸããŸãªãœãŒã·ã£ã«ãããã¯ãŒã¯ã®APIã®çµç¹ã®é¡äŒŒæ§ã«ãããçžäºäœçšãæ£åžžã«äžè¬åããããšãã§ããŸããã
ãã¡ããããããã¿ã€ã段éã§ã¯ãAPIã䜿çšãããã¹ãŠã®äœæ¥ã¯åæçã§ããããé«è² è·ãããžã§ã¯ãã§Hypnotoadã¯ãŒã«ãŒãAPIèŠæ±ãå®è£ ããã®ããããã¯ããããšã¯ãééããªãèŽ æ²¢ã§ç¡é§ã§ãã 幞ããªããšã«ãMojoliciousã¯ã€ã³ã¿ãŒãã§ã€ã¹ãšå®è£ ã®äž¡æ¹ã®ç¹ã§éåžžã«ãŸãšããªã€ãã³ããã·ã³äžã«æ§ç¯ãããŠãããããããŒã«å ã®åã¯ãŒã«ãŒã¯1ã€ïŒããšãã°mod_perlãªã©ïŒã ãã§ãªããå€æ°ã®äžŠåãªã¯ãšã¹ããåŠçã§ããŸããã¡ããã倧éã®éåæã³ãŒããå«ãŸããŠããå Žåã
ã¡ãªã¿ã«ã node.jsã®äœ¿çšã«å¯Ÿããäž»ãªãæããããåŒæ°ã®1ã€ã¯å®å šãªéåææ§ã§ãããããå€å žçãªåæãã©ãã€ã ã®ãã¬ãŒã ã¯ãŒã¯å ã§éçºãéå§ããå°ãªããšãéèŠãªããšãçµãããšãMojoliciousã¯åªããã¡ã³ã¿ã«ããªããžãšããŠæ©èœããŸããã€ããªããã³ãŒãã®äžéšïŒåæ+éåæïŒã ççŽã«èšã£ãŠãä»ç§ãã¡ã¯node.jsãããã»ã©æããããããåŸç¶ã®ãããžã§ã¯ãã«é©çšããããšæã£ãŠããŸãã
äžè¬ã«ã uid.meã¯ãèªè»¢è»çŠæ¢ ãã®ååã«åºã¥ããŠäœæãããåç³åãããèªå®¶è£œè£œåã®å±€å šäœãã·ãŽã¡ã«å³sinceã«ç ç²ã«ãããŸãããããã¯ã2005幎以æ¥ã DBIx :: Classã䜿çšãããšãå°é£ãªææã«è¶ è¶çãªææãåé¿ã§ããŸãã æããã¡ã¢ãªã
ããã§ãã uid.meãéçºãããš ãé¢çœãã¯ã©ãããçãŸããŸãã-ããã¯ãã¯ãã§ã
take { ⊠$take->('named_callback_slot_1') ... } process { my $taken = shift; ⊠},
Mojoã«åºã¥ããŠäœæïŒ:: IOLoop->é 延 ãã«ã¹ã±ãŒãäŸå€åŠçãå«ãååä»ãã«ã¹ã±ãŒãéåæAPIçžäºäœçšã®çµç¹ã«é¢é£ããæäœã®ãµã€ã¯ã«å šäœãå€§å¹ ã«ç°¡çŽ åããŸãïŒèå³ãããå Žåã¯ãå人çãªãã®ãèšè¿°ããŠå ±æããŸãïŒã
MongoDBã«æ»ã
ç§ã¯ãNoSQLãäž»æµã§ã¯ãªãã£ãé ããNoSQLã«äŒŒããã®ãå®è·µãããã£ãã®ã§ãã ãã®æã«çŽé¢ããªããã°ãªããªãã£ãé«è² è·ã¿ã¹ã¯ã®äžéšãšããŠã次ã®ç解ãåŸã ã«çŸããŸããã
1.å€å žçãªLAMPãããžã§ã¯ãã¯ãå€å žçãªSQLããŒã¿ããŒã¹ã§å§ãŸããŸãã
2.ãããžã§ã¯ããããã¥ã©ãŒã«ãªã£ãå Žåããhighloadãã®ã¹ããŒã¿ã¹ã«ãªããŸãããã以å€ã®å Žåã¯goto 1ã«ãªããŸãã
3.ãé«è² è·ãã®ã¹ããŒã¿ã¹ã¯ããã£ãã·ã¥ãã·ã£ãŒãã£ã³ã°ãã¬ããªã±ãŒã·ã§ã³ãããã³
SQLããŒã¿ããŒã¹ã«ä¿åãããŠãããã®ã®ããã¯ã¢ããã
4.é²è¡äžã®ãããžã§ã¯ãã®ããŒã¿ã¹ããŒã ã®é²åã¯ãããå€ãã®ããŒã¿ãèç©ãããããå€ãã®ããŒã¿ãèç©ãããéèŠãå€ãã»ã©ããããžã§ã¯ãã®äººæ°ãé«ãŸããŸãã
5.ããããã¹ãŠã®çµæãšããŠãORMã³ãŒãã¯ãç¹ã«æ®é ·ãªç¶æ³ã§ãmutexãmemcachedã®ããŒã¿ã®ã·ãªã¢ã«å/éã·ãªã¢ã«åãããªããã£ãã·ã£ãŒãã£ã³ã°ã®æ©èœãå®è¡ãå§ããŸã-ããŒã¿ã¹ããŒã ã®äžäœäºææ§ã確ä¿ããããã®ãããïŒå®éã®ç¶æ³ã§ããŒã¿ã®å€§èŠæš¡ãªãšã³ãããŒãšã³ãã®æŽæ°ãåžžã«æäŸã§ãããšã¯éããªãã£ãããïŒ ã
ããããæ²ããããšã«ãåºã«ã¯å³ãã2000幎代ããããŸããã
2010幎ã®åãã¯ãæé·ããé«è² è·ãããžã§ã¯ãã®ã»ãšãã©ã®åé¡ãããã«è§£æ¶ããããšãçŽæããããã€ãã®NoSQLãœãªã¥ãŒã·ã§ã³ã®åºçŸã«è§ŠçºãããŸããã ããã«äœ¿çšã§ãããªãŒãã³ãªNoSQLãœãªã¥ãŒã·ã§ã³ã®ç»å Žã¯å€ãã®äººã«ãã£ãŠäºæž¬ãããŠããŸããããããã«ãããããããçŸããæªæ¥ãå®éã«ç²åŸããããšã¯å¬ããé©ãã§ããã
æè¡é©æ°ã«é¢ããŠããã極端ãªååãšçžè«ããåŸã MongoDBãè©Šãããšã«ããŸããã
ç§ãã¡èªèº«ã®ããã«æ°ããæè¡ãç 究ããŠãç§ãã¡ã¯ãã®èœåãæ倧éã«æŽ»çšããæåãæåŸ ããŠïŒãããã£ãŠãç®±ããåºããéã®åŒŸäžžïŒãããããé床ã®rogæ ¢ãç§ãã¡ã«èå³æ·±ãããšã«çŽé¢ããå Žæã§ããå€å žçãªæè¡ã«ããŒã«ããã¯ããããšãæåŸ ããŠè«ççã§ãããšèããŸããèœãšãç©Žã
æ©äŒãæ倧åãããšã¯ã次ã®ããšãæå³ããŸãã
1. JSONããŒã¿ã¹ãã¬ãŒãžåœ¢åŒã«ãããããŒã¿ã¹ããŒãå ã®éåžžã®èŠª/å/ xãªã³ã¯ãæ°ã«ããã«ããŸãã¯æ°ã«ãããåžžèã«å¶éãããŸãã ãã®çµæãã¡ã€ã³ãŠãŒã¶ãŒãªããžã§ã¯ãã®ãã¹ããããæ§é ã¯å€ªåã§ããããšãããããŸãããã䟿å©ã§ãã äžé£ã®ãã©ã°ã衚瀺èšå®ãå°ããªãªã³ã¯ãªã¹ããããã³ä»¥åã¯äžé£ã®ãã¢ãŠãŒã¶ãŒSQLããŒãã«ã®äœæã«ã€ãªãã£ãä»ã®ãã¹ãŠã倧èã«é 眮ããŸããã
2.æ±çšã³ãŒããããŒã¿ã¢ãã«ã«è¿œå ãããŸãããããã«ãããã€ã³ã¿ãŒãã§ã€ã¹ã®ãããã¿ã€ããäœæãã段éã§ãJSæ©èœãåäžãããããšãéåžžã«å¿«é©ã«ãªããŸãããããšãã°ãURL / profile / saveãä»ããŠãæ°ããããŒã¿ã§ãŠãŒã¶ãŒãªããžã§ã¯ããæ¡åŒµããJSONãéä¿¡ã§ããããã«ãªããŸããïŒ
user.save({ 'style.profile.top': '20px', 'style.caption.tags.color': 'rgba(30, 29, 38, 1)', 'info.first_name': '' });
èš±å¯ããããŠãŒã¶ãŒã®ã¢ã¯ãã£ããã£ã«é¢é£ãããã¹ãŠã®æäœã¯ã500ããªç§ã®æœåšã³ã¬ã¯ã¿ãŒãåããå ±éã®éä¿¡æ©èœã«ããã±ãŒãžåãããããŸããŸãªã¢ãããã¯ç·šéãå ±éã®ããã±ãŒãžã«çµåããŸããã
ãã®çµæãã¯ã©ã€ã¢ã³ãåŽã®éçºè ã¯ãæ°ãããã£ãŒã«ãã®äœ¿çšãéå§ããã ãã§ããŠãŒã¶ãŒãªããžã§ã¯ãã®æ§é ãç°¡åã«æ¡åŒµã§ããŸããã
ãã¡ããããããã¿ã€ãã³ã°ãã§ãŒãºã®åŸã / profile / saveã®ãµãŒããŒåŽã«ã¯ãæ£ç¢ºãã®ããã«äžæãªãã£ãŒã«ããšãã£ã«ã¿ãŒåŠçãããå€ãé®æããã³ã³ããã¹ãããŒã¿ãã£ã«ã¿ãŒãè£ åãããŠããŸããã
åé¡ã¯1ã€ã ãã§ããããŠãŒã¶ãŒãããŒã¿ããŒã¹ã«ä¿åã§ããã®ã¯ããã£ãŒã«ãã衚瀺ãããåã«ãããã¡ã€ã«ãæåŸã«ç·šéããŠãããäžéšã®ãã£ãŒã«ãããŸã£ããååšããªãã£ãããã§ãã çæ³çã«ã¯ãããŒã¿ããŒã¹ããååŸãããªããžã§ã¯ãã«éæ³ã®ããã«è¡šç€ºãããåãã£ãŒã«ãã®ããã©ã«ãå€ãå¿ èŠã§ãã
ORMã¬ãã«ã§ã¯ãååŸããããã¹ãŠã®ããŒã¿ã®åŒ·å¶æ¡åŒµããååšããªããã¹ãŠã®ãã£ãŒã«ãã®ããã©ã«ãå€ãšãšãã«è¿œå ãããŸããã
åã¯éããŠããŸãã
ããŒã¿ããŒã¹ã®ãšã³ãããŒãšã³ãã®æŽæ°ã«é Œããã«ãªããžã§ã¯ãã®æ§é ãåçã«æ¡åŒµãããµãŒããŒåŽã ãã§ãªãã¯ã©ã€ã¢ã³ãåŽã§ãééçã«åäœããããšãã§ããŸããããæ°ãããã®ãè¿œå ããããã»ã¹ã¯éåžžã«å¿«é©ã§ããããã¿ã€ããããªãªãŒã¹ãžã®ç§»è¡ã«ã¯ã¡ããã©2ã€ã䌎ããŸããã¢ã¯ã·ã§ã³ïŒ
1.æ°ãããã£ãŒã«ãããŒã¿ã®ã«ãŒã«ãextend_rulesãã£ã«ã¿ãŒã«è¿œå ããŸãã
2.ãã®ãã£ãŒã«ãã®äºæ³ãããããã©ã«ãå€ãdefault_userã«è¿œå ããŸãã
ããããããã ãã§ãã ãæž èŽããããšãããããŸãããç§ãã¡ã¯ããªãã蚪ããã®ãåŸ ã£ãŠããŸãïŒ
ãã¶ãŒãã®PSãããŒãæ奜家ïŒ
mongodbããã®ãããã¡ã€ã«ã®ãã³ã
Using username "www". MongoDB shell version: 2.4.2 connecting to: uidme mongos> db.user.find({'uid':'pavel_kudinov'}).pretty(); { "_id" : ObjectId("519bbb1592762f6d65424301"), "uid" : "pavel_kudinov", "email" : "kudinov.pavel@gmail.com", "uguid" : "2926366677" "info" : { "first_name" : "", "last_name" : "", "headline" : "" "bio" : " ,\n ", "gender" : "male", "birthday" : "1985-07-03", "tags" : { "places" : [ "--" ], "jobs" : [ "uCoz.ru" ], "education" : [ "" ], "tags" : [ ] }, "contacts" : { "email" : "kudinov.pavel@gmail.com", "icq" : "", "skype" : "pavel-kudinov", "gtalk" : "kudinov.pavel", "aim" : "", "phone" : "+7 (928) 167 12 03" }, "sites" : [ { "link" : "http://vk.com/kudinovpavel", "title" : "vk.com/kudinovpavel" } ], "bg_pattern" : "", "background" : { "medium" : "/img/background/s/r/v/medium_r5vhibyl.jpg", "full" : "/img/background/s/r/v/full_r5vhibyl.jpg", "thumb" : "/img/background/s/r/v/thumb_r5vhibyl.jpg" }, "avatar" : { "full" : "/img/avatar/full_etpcnfon.jpg", "thumb" : "/img/avatar/thumb_etpcnfon.jpg" }, }, "tech" : { "last_login" : 1385995749, "theme_id" : 4, "last_login_ip" : "178.76.238.102", "ucoz" : { "reg_time" : "1358928666", "last_login" : "1367856843", "langp" : "ru", "reg_ip" : "2991386214", "last_admlogin" : "1366901917", "avatar" : { "geom" : "-10:0:0.1524", "file" : "/img/ucoz/29/26/2926366677/.OWyAuYrnAliL.jpg", "type" : "photo" }, "location_id" : "177270886" }, "email_activated" : 1 }, "style" : { "profile" : { "width" : "431", "left" : "50%", "margin_left" : "-540px", "hidden_contacts" : [ "phone", "icq", "email", "gtalk", "aim" ], "shadow" : "false", "hidden_tags" : [ ], "text_shadow" : "black_shadow", "height" : "auto", "right" : "auto", "min_height" : "566", "indent-bottom" : "0", "hidden_apps" : [ ], "top" : "77px", "bgcolor" : "rgba(224, 224, 224, 0.5)" }, "show_birthday" : "hide", "show_contacts" : "true", "editdialog" : { "left" : 499, "top" : 82, "open_tab" : "apps" }, "avatar" : { "width" : "208", "height" : "210" }, "apporder" : [ "facebook", "instagram", "google", "yandex", "youtube", "vkontakte", "twitter" ], "show_tags" : "true", "caption" : { "sites" : { "color" : "rgba(49, 49, 51, 1)", "font" : "Arial", "size" : "14" }, "name" : { "color" : "rgba(6, 44, 79, 1)", "font" : "Ubuntu", "size" : "55" }, "bio" : { "color" : "rgba(6, 44, 79, 1)", "font" : "PT Sans", "size" : "15" }, "tags" : { "color" : "rgba(30, 29, 38, 1)", "font" : "Arial", "size" : "14" }, "headline" : { "color" : "rgba(6, 44, 79, 1)", "font" : "PT Sans", "size" : "20" } }, "apptheme" : "t4", "bg" : { "left" : "0px", "right" : "auto", "margin_left" : "0px", "top" : "0px", "bgcolor" : "rgba(0, 0, 0, 1)", "key" : "fill", "pattern_opacity" : "0.9" } }, } mongos>