1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nimのcgiをさくらのレンタルサーバで実行する

Last updated at Posted at 2021-04-19

実施方針

  • 共有サーバ上のため、サーバ内ではコンパイルせず、ローカルの仮想環境上のFreeBSDにてコンパイルしcgiをサーバにアップロード。

環境

  • Windows10 Pro.
  • 仮想実行環境:Hyper-v
  • 仮想マシン:FreeBSD12.2
  • さくらのレンタルサーバ(プレミアム):
    FreeBSD 11.2-RELEASE-p14 amd64

手順

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 --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が増えることを期待しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?