👑
Nimのcgiをさくらのレンタルサーバで実行する
方針・ローカル環境
- 共有サーバ上のため、サーバ内ではコンパイルせず、ローカルの仮想環境上のFreeBSDにてコンパイルしcgiをサーバにアップロード。
環境
- Windows10 Pro.
- 仮想実行環境:Hyper-v
- 仮想マシン:FreeBSD12.2
- さくらのレンタルサーバ(プレミアム):
FreeBSD 11.2-RELEASE-p14 amd64
手順
FreeBSDの仮想マシンを設定
- 以下の記事を参考に設定。
- 参考:WSL? FreeBSDが使いたいんだけど
FreeBSDに、pkgを利用してNimをインストール。
pkg update -f
sudo pkg install nim
- nimbleを使う場合は、gitが必要なので、pkgでgitをインストールする。
sudo pkg install git
FreeBSDでnimのcgi用コードを作成.
- ただ、「test」と表示するだけのコード。
import cgi
writeContentType()
writeLine(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">")
writeLine(stdout, "<html><head><title>Test</title></head><body>")
writeLine(stdout, "test ")
writeLine(stdout, "</body></html>")
C言語のバイナリをコンパイル
- NimのコードをCコードジェネレータでコンパイル。
- 参考:Nim コンパイラ ユーザガイド
nim --o:test.cgi cc test.nim
さくらのレンタルサーバにアップロード
- FTP経由で上記のバイナリを公開ディレクトリにアップロード。このとき「バイナリ」で転送することに注意する。
cgiファイルのパーミッションを変更
- ファイルが実行できるよう、「755」、または、「705」にパーミンションを変更。
表示確認
- ブラウザで、以下のURLにアクセス。
- サンプルコードの「test」が表示されれば成功。
https://[アクセスドメイン]/test.cgi
エラーについて
ブラウザでアクセスした時に、InternalServerError(500)になる場合、以下のようなエラーログが管理画面から確認できます。
/home/XXXX/www/YYYY/test.cgi: Shared object has no run-time symbol table: /home/XXXX/www/YYYY/test.cgi
[cgi:error] [pid 24132] [client XXX.XXX.XXX.XXX:0] End of script output before headers: test.cgi
いろいろな原因があると思いますが、私の場合、FTPの際にバイナリでの転送をしていないために起きていました。
参考までに。
最後に
かなり端折って書きましたが、とりあえず、nimのコードでつくったcgiファイルをさくらのレンタルサーバで実行できることは確認しました。
もっと簡単な方法があれば、コメントに書いてもらえると助かります。
コーディング、デバッグ、デプロイまでをもっと簡単にできる方法を実験して、それができたらまた投稿したいと思います。
もっと、Nimmerが増えることを期待しています。
Discussion