質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Arch Linux

arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。

Q&A

解決済

1回答

357閲覧

Yesodアプリでketerを使ってデプロイしたいが動かない

apo

総合スコア362

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Arch Linux

arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。

1グッド

0クリップ

投稿2024/06/05 05:43

編集2024/06/05 07:00

実現したいこと

Yesodアプリでketerを使って自身のPCにデプロイして、アプリが自動起動するようにしたい。

発生している問題・分からないこと

keterの公式サイトなどを参考にデプロイを試していますが、アプリがブラウザに表示されません。

該当のソースコード

一連の手順を記載します。
テンプレート「simple」を利用してプロジェクトを作成します。

stack new app1 yesodweb/simple cd app1 stack install yesod-bin --install-ghc stack build

プロジェクトが正常に動作することを確認します。

stack exec -- yesod devel

イメージ説明

keter.ymlファイルは下記のように修正

app1/config/keter.yml

user-edited: true stanzas: - type: webapp exec: ../dist/bin/app1 args: [] hosts: - www.app1.com - localhost requires-secure: false - type: static-files hosts: - static.app1.com root: ../static - type: redirect hosts: - app1.com - localhost actions: - host: www.app1.com

※修正内容
user-edited: true
hosts:
- localhost

keterを実行

stack exec -- yesod keter

作成された「app1/app1.keter」ファイルを「opt/keter/incoming/」配下にコピー

一応、keterサービスを再起動

systemctl restart keter

ブラウザからlocalhost:90/app1にアクセスしてもアプリが表示されず下記のような表示となります。

イメージ説明

ログファイル(/opt/keter/log/)を確認すると下記の様に表示されます。

2024-06-05 05:28:24.69|Keter.Main:77|Info> Launching cli 2024-06-05 05:28:24.69|Keter.Main:85|Info> Launching initial 2024-06-05 05:28:24.69|Keter.AppManager:277|Info> Reloading from: NothingAIBundle "/opt/keter/etc/../incoming/my-project.keter" 1717555486 2024-06-05 05:28:24.92|Keter.App:118|Info> Unpacking bundle '"/opt/keter/etc/../incoming/app1.keter"' 2024-06-05 05:28:25.14|Keter.AppManager:283|Error> Error occured when launching bundle "app1": FileNotExecutable "/opt/keter/etc/../temp/app1-1/config/../dist/bin/app1" 2024-06-05 05:28:25.14|Keter.Main:87|Info> Started watching 2024-06-05 05:28:25.14|Keter.Main:89|Info> Started listening

app1プロジェクトのツリー

. ├── app │   ├── devel.hs │   ├── DevelMain.hs │   └── main.hs ├── app1.cabal ├── app1.keter ├── config │   ├── client_session_key.aes │   ├── favicon.ico │   ├── keter.yml │   ├── keter.yml.bak │   ├── robots.txt │   ├── routes.yesodroutes │   ├── settings.yml │   └── test-settings.yml ├── dist │   └── bin │   └── app1 ├── package.yaml ├── README.md ├── src │   ├── Application.hs │   ├── Foundation.hs │   ├── Handler │   │   ├── Comment.hs │   │   ├── Common.hs │   │   └── Home.hs │   ├── Import │   │   └── NoFoundation.hs │   ├── Import.hs │   ├── Settings │   │   └── StaticFiles.hs │   └── Settings.hs ├── stack.yaml ├── stack.yaml.lock ├── static │   ├── css │   │   └── bootstrap.css │   ├── fonts │   │   ├── glyphicons-halflings-regular.eot │   │   ├── glyphicons-halflings-regular.svg │   │   ├── glyphicons-halflings-regular.ttf │   │   └── glyphicons-halflings-regular.woff │   └── tmp │   ├── autogen-8iASS6X3.css │   └── autogen-r3XaZuvR.js ├── templates │   ├── default-layout.hamlet │   ├── default-layout.lucius │   ├── default-layout-wrapper.hamlet │   ├── homepage.hamlet │   ├── homepage.julius │   └── homepage.lucius ├── test │   ├── Handler │   │   ├── CommonSpec.hs │   │   └── HomeSpec.hs │   ├── Spec.hs │   └── TestImport.hs └── yesod-devel ├── devel-terminate └── rebuild 17 directories, 46 files

keterの設定ファイルは下記のとおりです。

/opt/keter/etc/keter-config.yaml

root: .. listeners: - host: "!6" # Listen on all IPv4 hosts port: 90 # Could be used to modify port - host: "!6" port: 1443

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他

参考にしたサイト
Deploying your Webapp<br>
Github snoyberg/keter<br>
Yesodで作ったWebアプリをketerでデプロイする<br>
Haskell + Yesodで作ったアプリをHerokuにデプロイする<br>
Haskell stack + Yesod + Heroku ついにできた!<br>
など

上記の詳細・結果

エラーメッセージ

Error occured when launching bundle "app1": FileNotExecutable "/opt/keter/etc/../temp/app1-1/config/../dist/bin/app1"

から実行ファイルが紐づけられていないのかな?とも思うのですが、解決できません。
ご教示頂けますようよろしくお願いします。

補足

ホストPC:Windows10
ゲストPC:VirtualBox(ArchLinux)

stack --version
Version 2.9.1, Git revision 409d56031b4240221d656db09b2ba476fe6bb5b1 (dirty) (8983 commits) x86_64

igrep👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Keterの使い方とは別になってしまいますが、「やりたいこと」を目指す上ではズレてはないと思う回答なのでここに書きます。

Keterは使わないほうが良いです。

数年前にYesodでアプリ開発をしていた時にKeterを試してみたのですが、すごく運用上のデバッグが大変だったり、明らかなバグが放置されていたりする状況で、多分ほとんどの人が使っていません。
私はKeterを見捨てて最初はsystemdのサービスに直接登録をして、後でDockerコンテナをECSで動かす運用に変えました。
数年前ですら見捨てられていたのですから、今では尚更使われてないと思います。
デスクトップ上で動かしたいというのであればそのままsystemdでバイナリを動かせば良いと思いますし、アセットが汚れるとかが嫌ならDockerなどを使えば良いです。
Keterの開発目標は確か「サーバ上でビルドを行うと負担がかかりすぎるけどサーバ上じゃないとライブラリなどのリンクが同じにならないことを解決する」とかだったと思うので、ローカル上のPCで動かす分にはあまり意味が無いですし、リンク問題などはDockerコンテナのほうがスマートに解決しています。

投稿2024/06/06 03:18

ncaq

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apo

2024/06/06 04:06

回答ありがとうございます。Keterを使わずに実行させる方法があればそうしたいのですがその方法がわかりません。javaなどのようにどこかに実行ファイルが作成されていたりするのでしょうか?
ncaq

2024/06/06 04:15 編集

はい、単純にLinuxならelfのようにネイティブの実行ファイルが生成されています。 `.stack-work`の中にありますが、プロジェクト内部で単に`stack install`を実行して`~/.local/bin/`の中にコピーされるのを使う方が手っ取り早いと思います。
apo

2024/06/06 04:26

```.stack-work```フォルダ配下を調べてみると、```app1/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.6.3.0/build/app1``というバイナリファイルっぽいファイルがありますが、そのディレクトリに移動し```./app1```とすると```app1: static: getDirectoryContents:openDirStream: does not exist (No such file or directory)```となります。これとは違うファイルでしょうか?
ncaq

2024/06/06 04:30

そのファイルだと思います。 何故エラーが出るのかと言うと、そのバイナリはカレントディレクトリの直下にstaticディレクトリがあることを期待しますが、ディレクトリ移動するとそのような構造ではなくなるからです。 プロジェクトルートのstaticディレクトリが存在する場所をカレントディレクトリとして、そのパスを打ち込んでバイナリを起動したら動くのではないかと思います。 もしくはstack installしてコピーされたバイナリをそのディレクトリで実行するか。
apo

2024/06/06 04:42

動きました!ありがとうござます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問