Yesod = Haskell $ Web

Haskellは、まだ演算子「ファイル」が存在する唯一のプログラミング言語です(>> =)

アブスルドープ


彼は、実用的な観点からHaskellを役に立たなくする人々、真空中の球面言語などが間違っている方法を説明することから始めることを計画しました しかし、私はReal World Haskellの作者がすでにすべてをやってくれているのではないかと心配しています。 このプログラミング言語がどれほど美しくパワフルであるかを話すというアイデアがありました-しかし、それは予想外の非難を伴うエキサイティングなストーリーを思い付くために重い音節と無力をもたらしました。 したがって、不要なものはすべて削除し、HaskellでのWeb開発の不幸について話します。


俳優


HaskellをWeb開発に使ってみたいとずっと思っていました。 第一に、それは私の職業経歴に十分に近く、第二に、それは非常に興味深いです)最後に、ソートと階乗検索アルゴリズムで眠りに落ちることなく、Haskellを学ぶ方法を得ます。

幸いなことに、この目的のために、既製のフレームワーク( ここを参照)と必要なパッケージ(ただし、 すべてに未知の山があります)がたくさんあります。
結論として、Yesod Web Frameworkを選択しました。 それは非常に一般的であり、優れた機能を備えていますが、選択は科学的な突っ込みの方法によって行われ、論理的に不当であると認めます。
さらに、自分の仕事の結果を現地で見るだけでなく、同僚に自慢できるようにしたかったのです。 したがって、Herokuで結果を公開することを目的としていました。 これには、haskellビルドパックが必要です。たとえば、 これです (ただし、私の場合はそれだけが機能したことを事前にお知らせします)。

はい


念のため、すべてを十分に詳細かつ完全に説明しようとします。 そのため、最初にGlasgow Haskell Compilerをインストールする必要があります。 パッケージマネージャー:

emerge -av ghc 

Cabalも傷つけません:

 emerge -av cabal cabal update 

依存関係に頭を悩ませないために、 cabal-devを使用する価値があります。これにより、将来必要なすべてのパッケージをサンドボックス(virtualenvなど)にインストールできます。

 cabal install cabal-dev 

最初のアプリケーション用にブランクを作成します。 実際、yesodは私たちのためにすべてを行います:

 yesod init 

アプリケーションの名前、データストレージの方法(たとえば、postgresqlで)および出来事を示します-完全に機能するWebアプリケーションを含むディレクトリを取得します。 cabal-devを使用して依存関係をインストールするだけです。

 cd MyApp cabal-dev install 

コンソールの排気に関する少しの瞑想-そして、私たちはアイデアの実装に一歩近づきました。 データベースの構成を指定することを忘れないでください。 それはconfig / postgresql.ymlファイルで見ることができます-そしてここではすべてがすでに盗まれています;私たちは考え抜かれています! このファイルには、4種類の構成(開発、テスト、ステージング、プロダクション)と、全員が継承するデフォルトの構成が含まれています。 データベースのユーザー名、パスワード、データベース名を指定するために残ります。
サーバーを起動します。

 yesod devel --dev 

--devオプションはcabal-devを使用するよう指示します-そうでない場合、Yesodはシステムにインストールされているパッケージを探します。
息を切らして、ブラウザでhttp:// localhost:3000を開き、かなり単純ですが、すでに結果を得ることができます。

プログラマーとしてのスキルと適切な人物としての自分のスキルを疑わせる1つの質問があります)実際、プロジェクトをいじくり回すようになったとき、私は努力の結果を見ることができませんでした(テンプレートに変更があったとしても!) 完全に再起動するためには、

 cabal-dev build / yesod build 

または単に開発サーバーを再起動します-また、アプリケーションを再インストールする必要があります

 cabal-dev install 

このバグや機能はまだ明確ではありませんが、これは決して明白ではないように思えます。

ヘロク


次のエピソードは、HerokuでのWebアプリケーションの公開に当てられます。 Cedarと呼ばれるランタイムスタックのおかげで、このすべてが可能になります。 このスタックを使用する場合、さまざまな言語およびフレームワークのサポートは、アプリケーションを起動するための環境を準備するビルドパックに完全に依存します。
Herokuは、そのようなビルドパックをいくつかサポートしています。たとえば、Ruby(まあ、誰が疑うでしょうか)、Node.js、Pythonなどです。 このリストに加えて、 かなりの数のサードパーティのビルドパックがあります。
当然、Haskell用のものが必要です。これは上記のリストに簡単に記載されています。 そして、それは私の驚きです、なぜなら 私は最近これを発見しました、そして、少し前にそれはそこにありませんでした。 当時、githubで検索し、いくつかのリポジトリを検索するように促されましたが、 このリポジトリは私の中で機能していました。

そのため、herokuでアプリケーションを作成します。

 heroku create my-app --stack=cedar --buildpack https://github.com/<   buildpack>.git 

次に、gitリポジトリを初期化し、MyAppを追加する必要があります。 展開する前に、忘れがちな変更をいくつか行う必要があります。 開始するには、 Procfiledeployディレクトリからプロジェクトのルートに転送する必要があります-このファイルには、プロジェクトの開始方法に関する情報が含まれています。 その後、データベースとサイトの実稼働構成を修正する必要があります。

dbに関して-もちろん、最初にアドオンHeroku Postgresを追加する必要があります。 追加後、コマンドで接続文字列を見つけることができます

 heroku pg:info # HEROKU_POSTGRESQL_URL heroku pg:credentials HEROKU_POSTGRESQL_URL 

すべての変更をコミットした後、herokuリモートリポジトリを指定します。

 heroku git:remote -a MyApp 

変更をサーバーに送信します

 git push heroku master 

待っています...展開の前に、buildpackを使用して、環境を準備し、すべての依存関係をインストールします。
そして、ここであなたが考えさせる問題が起こるかもしれません。 実際のところ、herokuは展開の完了を許可しない制限を設定します 。 方法と理由を見つけるために、ビルドパックリポジトリのクローンを作成して検査しました。 被験者は実験を求めました。 buildpackをローカルで使用し、それに応じてすべての変更の結果をすぐに確認できるようにするには、 heroku pushプラグインを使用できます。 この場合、gitをバイパスしてプロジェクトの展開を実行します。

 heroku push -b ~/mybuildpack 

いくつかの変更を行った後:

 -export PATH=$FIXED_HOME/ghc/bin:$FIXED_HOME/.cabal/bin$PATH +export PATH=$FIXED_HOME/ghc/bin:$FIXED_HOME/.cabal/bin:$PATH -cabal install -j5 --disable-library-profiling --disable-executable-profiling --disable-shared +cabal install -j2 --disable-library-profiling --disable-executable-profiling 


驚いたことに、すべてが機能し、展開が成功しました! (コメントでの熱烈な議論は奨励されます。私自身はなぜそれが機能したのか完全には理解していなかったためです)

おわりに


Yesodは、幅広い機能を備えた興味深い競争力のあるフレームワークです。 Yesod対Djangoを見てたい。 それ以前は、GAE、OpenShiftなどのクラウドサービスがどれもなかったという事実だけで止められました。 Haskellを扱うつもりはありません。 さて、問題が解決したら、別の興味深いことを勉強することで、あなた自身を喜ばせることができます。 私は私の衝動に一人ではないことを願っています)
将来的には、Yesodがどのように機能し、どのように機能するかについてお話します。 シェークスピアなどのグッズがたくさんあります)

PS:
Haskellの実稼働環境での使用に関するプレゼンテーション
mth.io/talks/haskell-in-production
www.shimweasel.com/hs_gbu

Source: https://habr.com/ru/post/J184058/


All Articles