WAI   時刻の表示

ホーム


基本的な例」を参考にして、プロジェクトとGitリポジトリ を作成してください。

時刻について

ここで説明している方法ですと、ローカルコンピューターの時刻ではなく、 サーバーに設定されている時刻が表示されます。

Main.hs

「wai-app」プロジェクト内の「src」ディレクトリの「Main.hs」を次のコードに 変更。


{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run, Port)
import qualified Data.ByteString.Char8 as B8
import qualified Data.ByteString.Lazy.Char8 as LB8
import Data.CaseInsensitive (mk)
import Data.Time
import System.Environment (getEnvironment)
import Data.Maybe

app :: Application
app _ respond = do
    time <- formatTime defaultTimeLocale "%Y/%m/%d/ %H:%M" <$>
        getZonedTime
    respond $ responseLBS
        status200
        [(mk $ B8.pack "Content-Type", B8.pack "text/plain")]
        (LB8.pack time)
    
main :: IO ()
main = do
    port <- getPort
    run port app
    
getPort :: IO Port
getPort = getEnvironment >>= return . port
    where
        port = fromMaybe defaultPort . fmap read . lookup "PORT"

defaultPort :: Port
defaultPort = 80
    

wai-app.cabal

「wai-app」プロジェクト内の「wai-app.cabal」の「build_depneds:」 を次のコードに変更。


  build-depends:       base >= 4.7 && < 5
                     , wai
                     , warp
                     , http-types
                     , case-insensitive
                     , bytestring
                     , time
    

ビルドとデプロイ

ビルド

stack build

Git リポジトリにプロジェクト内のすべてのファイルを追加

git add .

追加したファイルをリポジトリに関連付ける

git commit -m "wai-app"

デプロイ

git push dokku master

初回デプロイはリモートリポジトリにHaskell環境をインストールするために時間が かかります。2回目からはそれほど時間はかかりません。

次のように表示されればデプロイは成功しています。


=====> Application deployed:
       https://123.123.123.123:12345

To 123.134.134.123:wai-app xxxxxxxxxxxxxx master -> master

「https://123.123.123.123:12345」がアプリのURLです。ブラウザで確認してください。

CentOSの場合は「https://123-123-123-123:12345」というハイフン区切りで表示されます ので、「https://123.123.123.123:12345」というドット区切りに直して確認してください。

ファイアーウォールの設定

リモートサーバーがCentOSの場合は、ファイアーウォールの設定をしなければサイトが 表示されません。

CentOSサーバにログインして次の作業をしてください。「12345」の部分は、 「:」の後の5桁のポート番号です。この作業はUbuntuサーバーでは必要 ありません。

firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --reload

トラブルシューティング

デプロイに失敗する場合は次のことを試してみてください。

  1. ファイルの記述に間違いがないか

  2. プロジェクトはビルドしたか

  3. .ssh/known_hostsファイルを削除する

  4. 次のコードを実行してリポジトリを削除して、またリポジトリを作り直す。
    rm -rf .git

  5. リモートサーバーでリポジトリを削除して、またリポジトリを作り直す。
    ssh root@123.123.123.123
    su dokku
    cd
    dokku apps:destroy wai-app
    wwai-app
    dokku apps:create wai-app
    dokku apps:list
    リモートサーバーのリポジトリを作り直した場合は、アプリケーションのポート番号が 変更されます。またリモートサーバーのリポジトリを作り直した後の、初回デプロイは、 時間がかかります。


5143 visits
Posted: Feb. 13, 2019
Update: Feb. 13, 2019

ホーム   ページトップ