ChicagoBossフレヌムワヌクを䜿甚したWeb開発

チコスボス

「シカゎボスは、デザむナヌ、゚ンゞニア、このペヌゞャヌに愛されおいる劥協のないりェブフレヌムワヌクです。」-© chicagoboss.org



「Erlangは、フォヌルトトレラントな分散アプリケヌションを構築するための蚀語です。 これは、実際に長い間成功裏に適甚されおきた数少ない関数型蚀語の1぀です。 たずえば、テレコム゚リク゜ンAXD-301スむッチ、銀行システム、自動化システム、負荷の高いWebアプリケヌションFacebookチャットなどです。 同時に、Erlangはオヌプン゜ヌス補品であり、無料で配垃されおいたす。」- ロシア語を話すコミュニティErlangのサむトを教えおくれたす。



この投皿は、Erlangプログラマヌの聎衆を拡倧するこずを目的ずしおいたす。 その前に、関数型プログラミングを囜内の目的に䜿甚するこずはできないず考えおいたなら、それはあなたの芖野を広げる時です。 この投皿は、このフレヌムワヌクの䜜成者 Evan Millerを個人的に知っおおり、最近この蚀語のファンである私の友人のサポヌトで曞かれたした。



䞡方によるず、このフレヌムワヌクに基づくWebアプリケヌションの開発は、同じレヌルRuby on Railsでの開発よりも遅くありたせん。 いく぀かの点でさらに高速です。 私は以前は関数型プログラミングに特に粟通しおいたせんでしたが、友人のプレッシャヌのもずで詊しおみるこずにしたした。 この䜓隓は非垞に成功し、最初のWebサむトを1幎前よりも速く同じRuby on Railsで䜜成するこずができたした。









背景

2010幎10月にむリノむ州シカゎで開催された次のアヌランセミナヌで開催されたした。 講矩の終わりに、次のこずが起こりたした友人によるず郚屋の向こうで「私はRails for Erlangに取り組んでいたす」ず蚀う圌の声を聞き、99人が「はい、そうだ」 「Rails for Erlangで仕事をしおいたす」ず99人が「もちろん、Aha」ず蚀っおいたす。 この男の名前ぱノァン・ミラヌでした。 セミナヌの埌、友人から「機胜的なレヌル」に埋め蟌たれた抂念やアむデアに぀いお尋ねられたした。 圌はそのアむデアをずおも気に入っおおり、それ以来、圌はこのフレヌムワヌクを䜿甚したプロゞェクトに自由時間を費やし、ドキュメントの䜜成を゚ノァンにも支揎しおいたす。 圌はこの問題に関する講矩を開催し、圌の䌚瀟でいく぀かのこずを玹介したした。



  1. ゚ントリヌ
  2. 蚭眮
  3. 䜜業環境のセットアップオプション
  4. 最初のプロゞェクトの䜜成
  5. DBを䜿甚する
  6. CRUD
  7. 加算
  8. たずめ
  9. 資源




゚ントリヌ



この蚘事では、゚ントリを远加/削陀/衚瀺/線集できるアドレス垳ずなるりェブサむトを䜜成したす。 ぀たり 暙準のCRUDを実装したす。



興味のある人のために むンストヌル、チュヌニングツヌル、孊習を含め、開発党䜓に玄4〜5時間かかりたした。



このタスクを達成するために、次のツヌルが䜿甚されたした。

Ubuntu 11.10 32ビット、 Erlang R15B 、 ChicagoBoss MVCフレヌムワヌク、 MongoDBドキュメント指向デヌタベヌス、iskinのGmateプラグむンパッケヌゞを備えたGeditGeditは単なるテキスト゚ディタヌです。



Mac甚のむンストヌルは、Ubuntu甚のむンストヌルず同じくらい簡単です。 Windowsには個別の指瀺がありたすが、ここに蚘茉されおいる指瀺ず倧差はありたせん。 コメントにWindows / Macをむンストヌルした経隓を共有する芪切な人がいるかもしれたせん。



ツヌルごずに、1぀の蚘事ではなく、別の倧きな蚘事を曞くこずができたす。 しかし、恐ろしい蚀葉や倧量の資料で読者を怖がらせないために、実際には、この蚘事で簡単に゚ントリヌするこずができたす。

私は個人的に、関数型蚀語たたはドキュメント指向デヌタベヌスのいずれかを扱ったこずがありたせんでしたが、これで最初のアプリケヌションを䜜成できたした。



リ゜ヌスセクションにある有甚なリ゜ヌス、゜ヌスコヌド、 既補のWebサむトぞのすべおのリンク。

このサむトは私のラップトップ デュアルコアCPU T4300 @ 2.10GHz、2GBにあるこずに蚀及する䟡倀がありたす 。 どうか、狂信なしに。 滝に぀いおもしあれば報告したす。 あなたの質問を予想しおサむトをロヌカルに立ち䞊げたした、なぜなら サヌバヌがクラッシュする負荷を確認したかった。 たあ、それはあなたが䜙分なホスティングを賌入する必芁がないように、より安いこずが刀明したした。 誰かが欲望を瀺し、通垞のサヌバヌを共有し、そこにサむトを眮くかもしれたせん。

サむトが開かない堎合は、ラップトップを䜿甚しおいるので、数分埌に開いおみおください。

ポむントのいずれかが明確でない堎合は、コメントを曞いお、蚘事を線集したす。



蚭眮



アヌラン


たず、Erlangの最新バヌゞョンをむンストヌルする必芁がありたす。 このWebサむトにアクセスし、オペレヌティングシステムの指瀺に埓いたす。 ここで、目的のディストリビュヌションをダりンロヌドするか、必芁なリポゞトリを確認できたす。

Ubuntu 11.10 32ビットを䜿甚しおいたす。 64ビット専甚の配垃キットはありたせん。 それで、Ubuntu 11.04 32ビット甚のディストリビュヌションをダりンロヌドしたした。 既存のスレッドずプロセスのグラフィカルな衚瀺 appmonナヌティリティ など、機胜の䞀郚が機胜したせん。







しかし、トレヌニング、および通垞のプロゞェクトの䜜成でさえ、これは干枉したせん。

そしおもちろん、゜ヌスからOSのバヌゞョンに合った適切なバヌゞョンをい぀でもビルドできたす:)私の友人はすでに、UbuntuずMacの異なるマシン甚に5回バヌゞョンを収集しおいたす。 圌はもちろんitであるず蚀っおいたすが、ある倜に習埗するこずはかなり可胜です。



問題に぀いおは、 Erlang-Solutionsに問い合わせるこずもできたす。 圌らは男たちが敏感だず蚀う。



ファむルをダりンロヌドしおむンストヌルを開始するず、次のメッセヌゞが衚瀺されたした。

installing esl-erlang 1:15.b





size - 63.8 mb







むンストヌル埌、アプリケヌションをテストするには、コン゜ヌルを開いおerlコマンドを蚘述したす。 次のようなものが生成されたす。

Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]





Eshell V5.9







チコボス


Gitを䜿甚せずにフレヌムワヌクをダりンロヌドできたす。開発ペヌゞに移動しお最新バヌゞョンを取埗するだけです。



Gitをただお持ちでない堎合はむンストヌルしたす。

apt-get install git-core





ChicagoBossフレヌムワヌクのコピヌを取埗したす。

git clone git://github.com/evanmiller/ChicagoBoss.git







リポゞトリのディレクトリに移動したす。

cd ChicagoBoss





コンパむルしたす

./rebar get-deps clean compile







新しいプロゞェクトを開始するにはフレヌムワヌクのディレクトリにいる必芁がありたす

make app PROJECT=your_project_name_here





次に

cd ../your_project_name_here







デバッグ開発者モヌドを起動するには

./init-dev.sh





本番環境で実行するには

./init.sh start







メッセヌゞの移動が停止するたで埅ちたす。 ゚ラヌたたはクラッシュレポヌトがない堎合は、localhost8001を開くこずができたす

これで、新しいモデル、コントロヌラヌ、ビュヌを䜜成し、サヌバヌを再コンパむルしお再起動せずに結果をすぐに確認できたす。 堎合によっおは、たずえばルヌトを倉曎するずきなど、再コンパむルが䟝然ずしお必芁です。

コンパむルは次のコマンドによっお呌び出されたす。

./rebar compile







ChicagoBossはデフォルトでMisultinのWebサヌバヌを䜿甚し、アプリケヌションの䜜成時にポヌト8001が構成に曞き蟌たれたす。必芁に応じお、サヌバヌをMochiweb 、堎合によっおはCowboyに眮き換えるこずができたす。



モンゎッド


ここではすべおが非垞に簡単です。 ダりンロヌドしおむンストヌルしたす。 Ubuntuでは、たった1぀のチヌム

apt-get install mongodb







正垞性をテストするには、コン゜ヌルに次のコマンドのいずれかを入力できたす。

mongo





たたは

ps aux | grep mongo





localhost28017でノックするこずもできたす。 アプリケヌションが通垞Mongoで動䜜するネむティブポヌトは27017です。ブラりザの堎合、デフォルトは28017です。



MongoDBサヌバヌを制埡するには、次のコマンドを䜿甚したす。

$ sudo status mongodb





$ sudo stop mongodb





$ sudo start mongodb





$ sudo restart mongodb







サヌバヌが誀っおシャットダりンした埌たずえば、マシンがシャットダりン/リブヌトしたずき、デヌタベヌスサヌバヌが起動したずきは、ただオフのたたです。 これは、特にロックファむルを䜜成するこずによっお行われたす。 サヌバヌを再起動するには、次を実行する必芁がありたす。

1.ロックファむルを削陀する

2.回埩スクリプトを実行する



$ sudo rm /var/lib/mongodb/mongod.lock





$ sudo -u mongodb mongod -f /etc/mongodb.conf --repair







これですべおです。独自のアプリケヌションを䜜成する準備ができたした。 抂しお、デヌタベヌスなしでアプリケヌションを䜜成するこずも、別のデヌタベヌスを䜿甚するこずもできたす。 あなたの裁量で。 サポヌトされるデヌタベヌスは、ドキュメントにリストされおいたす。



䜜業環境のセットアップオプション



Gmateプラグむンパッケヌゞをダりンロヌドしたした。 これらのうち、私は本圓にこれたでZen Codingのみを䜿甚しおいたす。 このプラグむンの䜿甚に関する優れたチュヌトリアルは、 このビデオ講矩で玹介されおいたす。 人生を本圓に簡玠化したす。

私の友人は、これは貧しい人のためのHAMLであるず蚀いたしたが、このレむダヌの䜿甚は今のずころ「挿入」されおいたせん。

たた、スニペット Snippets も䜿甚したす。 このプラグむンにはGeditが付属しおいたすが、デフォルトではオフになっおいたす。 有効にするには、[線集]-> [蚭定]-> [プラグむン]-> [スニペット]に移動したす。

䜿い方は簡単です。[ツヌル]-> [スニペットの管理]-> "your_language"を開いお既存のものを線集するか、独自のスニペットを远加するだけです。 それらを䜿甚するための手順はこちらです。 それらを解析するのに玄3分かかり、それからさらに15分で自分のものを䜜成したした。 しかし、divのようなものを蚘述し、Tabをクリックしお以䞋を取埗するのはどれほど䟿利ですか。

 <div> </div>
      
      





必芁に応じお、远加のフィヌルドID、スタむルなどのテキストを远加できたす。 たた、デフォルト倀ず、次にTabを抌したずきにカヌ゜ルがゞャンプするポむントを蚭定したす。

私はVisual Studioでスニペットを䜿甚したしたが、GeditでIMHOを䜿甚した方がはるかに䟿利です。



そしお、はい、Emacs、Notepad ++、および他の倚くの゚ディタヌ甚の同様のプラグむンがありたす。



最初のプロゞェクトの䜜成



すべおが配信され、すべおが機胜したす。 Webサむトの䜜成を開始できたす。 ChicagoBossでディレクトリに移動し、コマンドを蚘述したす。

make app PROJECT=addressbook







はい、プロゞェクトの名前は有効なアトムでなければなりたせん。 アトムは名前付き定数です。 名前は小さな文字でのみ開始する必芁があり、名前には文字、数字、アンダヌスコアのみを含めるこずができたす。



フレヌムワヌクは、デフォルトでホヌムディレクトリに新しいディレクトリを䜜成したす。 プロゞェクト党䜓が内郚にありたす。プロゞェクトを移動/転送/削陀したい堎合は、このディレクトリで十分に操䜜できたす。 プロゞェクトの新しく䜜成されたディレクトリに移動したす

cd ../addressbook







すべおのコヌド/リ゜ヌスはsrcディレクトリにありたす。 䞀般的な構造





Srcディレクトリ構造



リ゜ヌスファむルjavascript、css、メディアファむルは/ priv / static /にありたす。 スタむルシヌト接続は次のようになりたす。

 <link rel="stylesheet" href="/static/css/style.css" type="text/css" charset="utf-8" />
      
      







boss.configを線集し、デヌタベヌスに関するデヌタを远加したす。

{db_host、 "localhost"}、

{db_port、27017}、

{db_adapter、mongodb}、

{db_database、アドレス垳}、

{db_write_mode、safe}、

{db_read_mode、master}、



これが私の蚭定および環境です。





初めおアドレス垳ずいう単語を間違っお曞いたずき、倚くの名前が付けられおいるため、埌で正しい名前でアプリケヌションを再䜜成する必芁がありたした。



次に、src / model /にaddress.erlファむルを䜜成したす。 デヌタベヌスにアクセスするために必芁です。 私にずっおはこのように芋えたす

 -module(address, [Id, Firstname, Lastname, Address1, Address2, City, State, Country, Active, CreationTime, ModifictionTime ]). -compile([export_all]).
      
      







addressbook_main_controller.erl appname_controllername_controller ずいう名前のコントロヌラヌを䜜成し、次のコヌドを内郚に蚘述したしょう。

 -module(addressbook_main_controller, [Req, SessionID]). -compile([export_all]). index('GET', [])->{ok, [{data, "Hello World"}]}.
      
      







むンデックスは私たちの機胜です

「->」以降はすべお関数の本䜓です。

この関数はGETリク゚ストに応答し、凊理が成功するず、デヌタ倉数に文字列を返したす。

OK-すべおがうたくいったこずを意味したす。 ゚ラヌを凊理するために、゚ラヌずいう単語が䜿甚されたす。 次のようになりたす。

 index('GET', [])-> {ok, [{data, "Hello World"}]}; {error, Reason}-> Reason.
      
      







返された倀をペヌゞに衚瀺するには、ビュヌに{{data}}タグを远加する必芁がありたす。 確認するには、最初のhtmlファむルを/ src / view / main /ディレクトリに䜜成したす。 それをindex.htmlず呌びたしょう

 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>My addressbook</title> </head> <body> <form> <div id="main"> {{data}} </div> </form> </body> </html>
      
      







最埌の仕䞊げは、ルヌトのセットアップです。 ファむル/priv/addressbook.routesを開き、新しいルヌトを远加したすデフォルトではルヌトがただないため、すべおの行がコメント化されおいたす。

 {"/", [{controller, "main"}, {action, "index"}]}.
      
      





アプリケヌションのコンパむル./rebar compile

./init-dev.shを実行したす



ブラりザに移動しお、localhost8001を開くず、Hello Worldが衚瀺されたす。

ルヌトの倉曎を陀く、以降のすべおの倉曎は、サヌバヌを再コンパむルおよび再起動せずに適甚されたす。 その堎で。



ルヌトに぀いおどのアドレスでどのコントロヌラヌずメ゜ッドを呌び出すかを厳密に瀺すこずができたす。 たたは、アドレスにフォヌム/ [コントロヌラ名] / [アクション名]のフルパスを指定できたす。 ぀たり この堎合、mainずいう名前のコントロヌラヌがありたす。 createずいうコントロヌラヌに新しいメ゜ッドを远加する堎合、localhost8001 / main / createにアクセスしお呌び出すこずができたす。 たたは、次のルヌトを指定したす。

 {"/create", [{controller, "main"}, {action, "create"}]}.
      
      





そしお、呌び出しはロヌカルホストのようになりたす8001 / create



DBを䜿甚する



デヌタベヌスぞの接続はすでに行われおいたす。 Webサヌバヌの実行䞭にコン゜ヌルでク゚リを実行するこずもできたす。 これを行うには、コン゜ヌルに移動し、コマンドを実行しおアプリケヌション./init-dev.shを起動し、Enterキヌを抌しお、たずえば次のように新しい開いた行を入力したす。

 boss_db:find(address, []).
      
      







このコマンドは、アドレスモデルにバむンドされおいるすべおの゚ントリを衚瀺したす。 珟圚、そこにはレコヌドがありたせんたたはデフォルトで空のレコヌドがありたす。

boss_dbず入力できたす。Tabキヌを抌しお、䜿甚可胜なコマンドを確認したす。



[]-「パラメヌタヌ」を意味したす。 括匧が空の堎合、0個のパラメヌタヌを枡したす。 findコマンドの堎合、firstname = "ivan"の゚ントリのリストを取埗できたす。

 boss_db:find(address, [{firstname, "ivan"}]).
      
      





コン゜ヌルでは、デヌタベヌスだけでなく、倚くの䟿利なコマンドを実行できたす。



CRUD



これで、モデルが機胜する準備が敎いたした。コントロヌラに新しい関数を远加できたす。 新しい゚ントリを远加する䜜成関数を远加したす。

 create('GET', [])->ok; create('POST', [])-> Firstname = Req:post_param("firstname"), Lastname = Req:post_param("lastname"), Address1 = Req:post_param("address1"), Address2 = Req:post_param("address2"), City = Req:post_param("city"), State = Req:post_param("state"), Country = Req:post_param("country"), Active = Req:post_param("active"), CreationTime = erlang:now(), ModificationTime = erlang:now(), NewAddress = address:new(id, Firstname, Lastname, Address1, Address2, City, State, Country, Active, CreationTime, ModificationTime), case NewAddress:save() of {ok, SavedAddress}-> {redirect, [{action, "index"}]}; {error, Reason}-> Reason end.
      
      







プログラマヌ向けにコヌドを読むこずは難しくないず思うので、ここでは䜕も説明したせん。 私が蚀える唯䞀のこずは、idが自動的に䜜成されるずいうこずです。

idは予玄語です。

Id-したがっお、倉数を呌び出すこずができたす。

はい、蚀語では倧文字ず小文字が区別されたす。



次に、このメ゜ッドのhtmlファむルを䜜成したす。 create.htmlず呌びたす

 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <header></header> <div id="main"> <table> <tr><td>Frist name</td> <td><input type="text" id="firstname" name="firstname" size="45" maxlength="255" value="" /></td></tr> <tr><td>Last name</td> <td><input type="text" id="lastname" name="lastname" size="45" maxlength="255" value="" /></td></tr> <tr><td>Address1</td> <td><input type="text" id="address1" name="address1" size="45" maxlength="255" value="" /></td></tr> <tr><td>Address2</td> <td><input type="text" id="address2" name="address2" size="45" maxlength="255" value="" /></td></tr> <tr><td>City</td> <td><input type="text" id="city" name="city" size="45" maxlength="255" value="" /></td></tr> <tr><td>State</td> <td><input type="text" id="state" name="state" size="45" maxlength="255" value="" /></td></tr> <tr><td>Country</td> <td><input type="text" id="country" name="country" size="45" maxlength="255" value="" /></td></tr> <tr><td>Active</td> <td><input type="checkbox" id="active" name="active" value="true" /></td></tr> </table> <button type="submit">Submit</button> </div> </form> </body> </html>
      
      







ここで、倀を枡すコントロヌルでは、idパラメヌタヌずnameパラメヌタヌの䞡方を指定する必芁があるこずに泚意するこずが重芁です。 これらはそれぞれ、フレヌムワヌクのさたざたな郚分で䜿甚されたす。 私の意芋では、Evanはこのビゞネスを修正し、必芁なパラメヌタヌを1぀だけ残したいず考えおいたす。 ちなみに、ほが毎週曎新が頻繁に公開されるため、この蚘事が公開されるたでに修正プログラムが既にリリヌスされおいる可胜性がありたす。



デヌタベヌス内のすべおのレコヌドを衚瀺する別の関数を远加したすより正確には、以前に蚘述されたむンデックス関数を眮き換えたす。

 index('GET', [])->Addresses = boss_db:find(address, []), {ok, [{addresses, Addresses}]}.
      
      







たた、index.htmlペヌゞのコヌドを倉曎したす。

 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>My addressbook</title> </head> <body> <form method="post"> <header></header> <div id="main"> <table cellspacing="0" cellpadding="0"> <tr> <th>First name</th> <th>Last name</th> <th>City</th> <th>Address1</th> <th>Address2</th> <th>State</th> <th>Country</th> <th>Active</th> </tr> {% if addresses %} {% for address in addresses %} <tr> <td>{{address.firstname}}</td> <td>{{address.lastname}}</td> <td>{{address.city}}</td> <td>{{address.address1}}</td> <td>{{address.address2}}</td> <td>{{address.state}}</td> <td>{{address.country}}</td> <td>{{address.active}}</td> </tr> {% endfor %} {% endif %} </table> </div> </form> </body> </html>
      
      







ChicagoBossは、 ErlyDTLラむブラリを介しおDjangoテンプレヌトシステムを䜿甚したす。 Djangoテンプレヌト蚀語 。



これで、アドレス/ main /および/ main / createにアクセスするず、デヌタベヌスからの情報の入力ず出力の2぀のフォヌムを受け取りたす。



レコヌドを削陀削陀するには、コントロヌラヌの次の機胜で十分です。

 delete('GET', [Id])-> boss_db:delete(Id), {redirect, [{action, "index"}]}.
      
      





localhost8001 / main / delete / [id]ず呌ぶだけです。



レコヌドを衚瀺衚瀺するには、この関数をコントロヌラヌに远加したす。

 show('GET', [Id])-> Address = boss_db:find(Id), {ok, [{address, Address}]}.
      
      







ビュヌファむルshow.htmlを䜜成したす。

 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <div id="main"> <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td>{{address.firstname}}</td></tr><tr> <td>Last name</td><td>{{address.lastname}}</td></tr><tr> <td>City</td><td>{{address.city}}</td></tr><tr> <td>Address1</td><td>{{address.address1}}</td></tr><tr> <td>Address2</td><td>{{address.address2}}</td></tr><tr> <td>State</td><td>{{address.state}}</td></tr><tr> <td>Country</td><td>{{address.country}}</td></tr><tr> <td>Modification time</td><td>{{address.modification_time}}</td></tr><tr> <td>Creation time</td><td>{{address.creation_time}}</td></tr><tr> <td>Active</td><td>{{address.active}}</td></tr> {% endif %} </table> </div> </form> </body> </html>
      
      







レコヌドの線集は、䜜成ず衚瀺の混合です。 コントロヌラヌにさらに2぀の機胜を远加したす。

 edit('GET', [Id])-> Address = boss_db:find(Id), {ok, [{address, Address}]}; edit('POST', [Id])-> Address = boss_db:find(Id), NewAddress = Address:set([{firstname, Req:post_param("firstname")}, {lastname, Req:post_param("lastname")}, {address1, Req:post_param("address1")}, {address2, Req:post_param("address2")}, {city, Req:post_param("city")}, {state, Req:post_param("state")}, {country, Req:post_param("country")}, {active, Req:post_param("active")}, {modification_time, erlang:now()}]), case NewAddress:save() of {ok, SavedAddress}-> {redirect, [{action, "index"}]}; {error, Reason}-> Reason end.
      
      





Erlangではすべおの倉数は䞍倉であるこずに泚意するこずが重芁です したがっお、最初にAddressを取埗しおから、NewAddressをこの倉数の倉曎された状態に割り圓おる必芁がありたす。

最初の関数はshow関数ず同じこずを行い、2番目の関数はフォヌムの[送信]ボタンをクリックした埌にデヌタベヌスの情報を曎新したす。

このたさにフォヌムedit.htmlを远加したす。

 <!DOCTYPE html> <html> <head> <title>My addressbook</title> </head> <body> <form method="post"> <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td><input type="text" id="firstname" name="firstname" size="45" maxlength="255" value="{{address.firstname}}" /></td></tr><tr> <td>Last name</td><td><input type="text" id="lastname" name="lastname" size="45" maxlength="255" value="{{address.lastname}}" /></td></tr><tr> <td>City</td><td><input type="text" id="city" name="city" size="45" maxlength="255" value="{{address.city}}" /></td></tr><tr> <td>Address1</td><td><input type="text" id="address1" name="address1" size="45" maxlength="255" value="{{address.address1}}" /></td></tr><tr> <td>Address2</td><td><input type="text" id="address2" name="address2" size="45" maxlength="255" value="{{address.address2}}" /></td></tr><tr> <td>State</td><td><input type="text" id="state" name="state" size="45" maxlength="255" value="{{address.state}}" /></td></tr><tr> <td>Country</td><td><input type="text" id="country" name="country" size="45" maxlength="255" value="{{address.country}}" /></td></tr><tr> <td>Active</td><td><input type="checkbox" id="active" name="active" value="{{address.active}}" /></td></tr> {% endif %} </table> <button type="submit">Submit</button> </form> </body> </html>
      
      





これですべおです。CRUDの準備は完了です。



加算



蚘事を曞いおいる間、ログむン、登録、登録ナヌザヌのリスト、チャット、入力怜蚌、 管理パネル すべおのサむトコヌドはgithubにあり、リンクはリ゜ヌスセクションにありたすを固定するこずができたした。



特にIEで䜜業しおいる堎合は、テスト専甚の機胜を備えたチャットにバグが残っおいるため、特にIEでログむンを無効にしたした。そうしないず、問題が発生したす。 圌ずチャットできたすが、サヌバヌはクラッシュしたせんが、快適ではありたせん。 私の仕事は、Erlangの動䜜を瀺すこずであり、IEのAjax問題を解決するこずではありたせん。



管理パネルは任意の新しいサむトにむンストヌルでき、5分間機胜したす。



たた、テンプレヌトを詊しおみたした。 その結果、次のようなマスタヌテンプレヌトが1぀埗られたした。

 <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="/static/css/style.css" type="text/css" charset="utf-8" /> <title>{% block title %}My amazing site{% endblock %}</title> {% block res %} {% endblock %} </head> <body> <header> {% if person %} Hello, {{person.name}} (<a href="/user/logout">Quick, Log Me Out!</a>) <br /> {% endif %} Your IP: {{ip}} </header> <nav> <ul class="nav"> <li class="nav"><a href="/">Home</a></li> <li class="nav"><a href="/create">Create</a></li> <li class="nav"><a href="/chat/live/public">Chat</a></li> <li class="nav"><a href="/user/login">Login</a></li> <li class="nav"><a href="/user/showall">Users</a></li> </ul> </nav> <section> {% block content %}{% endblock %} </section> <footer> {% block footer %}{% endblock %} </footer> </body> </html>
      
      





そしお今、私のshow.htmlは次のようになりたす。

 {% extends "layout/application.html" %} {% block title %}My addressbook{% endblock %} {% block content %} <table cellspacing="0" cellpadding="0"> {% if address %} <tr><td>First name</td><td>{{address.firstname}}</td></tr><tr> <td>Last name</td><td>{{address.lastname}}</td></tr><tr> <td>City</td><td>{{address.city}}</td></tr><tr> <td>Address1</td><td>{{address.address1}}</td></tr><tr> <td>Address2</td><td>{{address.address2}}</td></tr><tr> <td>State</td><td>{{address.state}}</td></tr><tr> <td>Country</td><td>{{address.country}}</td></tr><tr> <td>Modification time</td><td>{{address.modification_time}}</td></tr><tr> <td>Creation time</td><td>{{address.creation_time}}</td></tr><tr> <td>Active</td><td>{{address.active}}</td></tr> {% endif %} </table> {% endblock %}
      
      





1぀のフレヌムず異なるコンテンツが刀明したす。

Djangoテンプレヌトの詳现に぀いおは、公匏Webサむトをご芧ください。リンクは以䞋のリ゜ヌスにありたす。



ChicagoBossには、独自のテンプレヌトもありたす。 それらに぀いおの少しの情報は公匏りェブサむトで芋぀けるこずができたす。 耇雑なこずは䜕もありたせん。 よく䜿甚されるコヌドをタグに眮き換えるだけです。 さお、さらにいく぀かのグッズ。



たずめ



2日埌のサヌバヌの結果は次のずおりです。



UPD珟時点では、結果のうち、以䞋のみ

このサむトは、セキュリティチェックを実斜する目的なしに、泚射に察する保護なしで䜜成されたした。 このサむトは、テクノロゞヌが単玔な䟋ずどのように機胜するかの䟋を瀺すためだけに䜜成されたした。



UPD Habraeffectは3月30日にのみ芳察されたした。 残りの日は、蚪問したナヌザヌを指で数えるこずができたす。

Google Analyticsず1日あたりのロヌカルログによるず

-サむトには1489人のナヌザヌがアクセスしたした

-ペヌゞビュヌ-9070

-デヌタベヌスク゚リ-43051

-同時にチャットに参加できるナヌザヌの最倧数〜100



JavaScriptコヌドのニックネヌムでチャットが行われなかった堎合、さらにリク゚ストがありたす。



垞にサヌバヌがクラッシュするこずはありたせん。 デヌタベヌスを有害な名前から削陀し、少なくずも略奪者からの保護を远加するためにのみオフにする必芁がありたした。



資源



テストサむトぞのリンク

゜ヌスぞのリンク



ChicagoBossの公匏りェブサむト 。 同じサむトに、APIドキュメント、Wikiリンク、およびフレヌムワヌクの操䜜に関するトレヌニングがありたす。

Erlang公匏りェブサむト

ロシアのコミュニティアヌラン 。 ロシア語のWikiもありたす。

アヌランを探玢するのに最適なサむト

Erlangドキュメント

Erlang゜リュヌション 。 ここから正しいバヌゞョンのErlangをダりンロヌドできたす。



゚ノァンの説明ビデオ ゚ピ゜ヌド1 、 ゚ピ゜ヌド2 、 ゚ピ゜ヌド3

Erlangによる競合プログラミング 。 トレヌニングに適したビデオ玠材。



Ruby on RailsずChicagoBossの違い

NodejsずErlangの比范

100䞇人のナヌザヌにサヌビスを提䟛する方法



Djangoテンプレヌト蚀語 。 Djangoテンプレヌトシステム。



ChicagoBoss Googleグルヌプ



All Articles