2
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.

開発日記 2020/08/20 よすぽジャッジにRubyを追加しようとして苦戦しています

Last updated at Posted at 2020-08-19

この記事は、作業の経過を書いておくことであとで同じようなことをする人の助けになればと思い書いています。経験がある人、もしくは未来人の私は助けてください。

Library Checkerを知っていますか?僕は知っています。

こんにちは。Library Checker(よすぽジャッジと呼んでいます)の言語にRubyを追加しようとして苦戦中です。

よすぽジャッジは競プロに必要なライブラリのテストができるサイトです。

現状、このサイトにはRubyのテスト環境はありません。残念ながら。

おそらくご存知ないと思いますが、私はRubyで競プロをすることに熱を(41.1℃ほども)入れているので、Rubyが使いたいのです。(諦めてRustに乗り換えようかとしていたのですが、Rubyをできるようにすればいいじゃないという私にとっては目からウロコの発想をくれたそすうぽよさんに感謝します)

どうにかRubyができるようにしたいので、がんばります。

とりあえず、先駆者様のプルリクを参考にしてみます。

なんとなくわかったような・・・・。

テスト環境を整えようとします。

problemsをcloneして、READMEを読みつつコマンドを打ってみます。

$ git clone https://github.com/yosupo06/library-checker-problems.git
$ cd library-checker-problems
$ ./generate.py -p unionfind
02:45:36 [INFO] Start unionfind
02:45:36 [INFO] generate params.h
02:45:36 [INFO] Test cases are already generated
02:45:36 [INFO] The checker is already compiled

よさげなのでjudgeをcloneして同様のことをします。

$ git clone https://github.com/yosupo06/library-checker-judge.git
$ cd ../library-checker-judge
$ pip3 install -r requirements.txt
$ ulimit -s unlimited
$ pip3 install termcolor toml psycopg2 psutil grpcio minio
$ sudo apt install postgresql-client libpq-dev python3 python3-dev python3-pip g++ cgroup-tools libcap2-bin
$ ./launch_local.sh

なんかエラーが出たので適当にぐぐって解決できないか試しました。エラーは消えたので覚えてません。

$ curl -OL https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-linux-x86_64.zip
unzip protoc-3.4.0-linux-x86_64.zip -d protoc3
$ sudo mv protoc3/bin/* /usr/local/bin/
$ sudo mv protoc3/include/* /usr/local/include/
$ pip3 install -U protobuf
./launch_local.sh

起動できたのでevansとやらを入れて試してみます。

# evans インストール方法 わすれました
$ evans --host localhost --port 50051 api/proto/library_checker.proto
  ______
 |  ____|
 | |__    __   __   __ _   _ __    ___
 |  __|   \ \ / /  / _. | | '_ \  / __|
 | |____   \ V /  | (_| | | | | | \__ \
 |______|   \_/    \__,_| |_| |_| |___/

 more expressive universal gRPC client


librarychecker.LibraryCheckerService@localhost:50051>
Good Bye :)
evans: deprecated usage, please use sub-commands. see `evans -h` for more details.

いけたっぽい
あとjudge以下のGoも(↓いらないっぽい)

$ cd judge
$ go run main.go judge.go
2020/08/20 03:09:33 local mode
2020/08/20 03:09:33 Connect to API host: localhost:50051
2020/08/20 03:09:34 JudgeName: tzm
2020/08/20 03:09:34 Start Pooling

はい

この端末は開いたままで別の端末を起動して作業します。

どうやらいけたっぽいのでfrontendもやります。

$ git clone https://github.com/yosupo06/library-checker-frontend.git
$ go run . --local
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] Loaded HTML Templates (12): 
	- login.html
	- navbar.html
	- problem.html
	- ranking.html
	- register.html
	- submitlist.html
	- 
	- css.html
	- help.html
	- problemlist.html
	- submitinfo.html
	- userlist.html

[GIN-debug] GET    /public/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] HEAD   /public/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] GET    /register                 --> main.registerGet (4 handlers)
[GIN-debug] POST   /register                 --> main.registerPost (4 handlers)
[GIN-debug] GET    /login                    --> main.loginGet (4 handlers)
[GIN-debug] POST   /login                    --> main.loginPost (4 handlers)
[GIN-debug] GET    /logout                   --> main.logoutGet (4 handlers)
[GIN-debug] GET    /                         --> main.problemList (4 handlers)
[GIN-debug] GET    /problem/:name            --> main.problemInfo (4 handlers)
[GIN-debug] POST   /submit                   --> main.submit (4 handlers)
[GIN-debug] GET    /submission/:id           --> main.submissionInfo (4 handlers)
[GIN-debug] GET    /submissions              --> main.submitList (4 handlers)
[GIN-debug] GET    /rejudge/:id              --> main.getRejudge (4 handlers)
[GIN-debug] GET    /ranking                  --> main.getRanking (4 handlers)
[GIN-debug] GET    /help                     --> main.helpPage (4 handlers)
[GIN-debug] GET    /admin/userlist           --> main.getUserList (4 handlers)
[GIN-debug] GET    /admin/addadmin/:name     --> main.getAddAdmin (4 handlers)
[GIN-debug] GET    /admin/deladmin/:name     --> main.getDelAdmin (4 handlers)
[GIN-debug] Listening and serving HTTP on :8080

いけたのかな?

なんかエラーが出てたので一旦終わってなんかします。

$ cd ../library-checker-judge/judge/executor-rust
$ cargo build --release

適当に全部再起動したらエラーでなくなりました。

ブラウザでlocalhost:8080を見てみます。

(スクショ撮るの忘れた)問題なんもねーじゃん。

$ cd ../library-checker-problems
$ ./deploy.py

はい。

おやすみなさい

Q. そんな行きあたりばったりで大丈夫か?
A. 大丈夫じゃないが

2
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
2
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?