Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

ローカルに久しぶりにtDiaryをインストールしてみる

tdiary-core/INSTALL-rack.md at master · tdiary/tdiary-core · GitHub を読んで、そのままやってみる。

> gem install tdiary
Fetching webrick-1.8.1.gem
Fetching thor-1.2.2.gem
Fetching rack-3.0.7.gem
Fetching mail-2.8.1.gem
Fetching hikidoc-0.1.0.gem
Fetching mini_mime-1.1.2.gem
Fetching emot-0.0.4.gem
Fetching fastimage-2.2.6.gem
Fetching tdiary-5.2.4.gem
Successfully installed webrick-1.8.1
Successfully installed thor-1.2.2
Successfully installed rack-3.0.7
Successfully installed mini_mime-1.1.2
Successfully installed mail-2.8.1
Successfully installed hikidoc-0.1.0
Successfully installed fastimage-2.2.6
Successfully installed emot-0.0.4
Successfully installed tdiary-5.2.4
Parsing documentation for webrick-1.8.1
Installing ri documentation for webrick-1.8.1
Parsing documentation for thor-1.2.2
Installing ri documentation for thor-1.2.2
Parsing documentation for rack-3.0.7
Installing ri documentation for rack-3.0.7
Parsing documentation for mini_mime-1.1.2
Installing ri documentation for mini_mime-1.1.2
Parsing documentation for mail-2.8.1
Installing ri documentation for mail-2.8.1
Parsing documentation for hikidoc-0.1.0
Installing ri documentation for hikidoc-0.1.0
Parsing documentation for fastimage-2.2.6
Installing ri documentation for fastimage-2.2.6
Parsing documentation for emot-0.0.4
Installing ri documentation for emot-0.0.4
Parsing documentation for tdiary-5.2.4
Installing ri documentation for tdiary-5.2.4
Done installing documentation for webrick, thor, rack, mini_mime, mail, hikidoc, fastimage, emot, tdiary after 6 seconds
9 gems installed

しんぷる

> tdiary version
tdiary 5.2.4

大昔のバージョンしか知らないので、CLIがあるのが驚き。

> tdiary new diary
      create  diary
      create  diary/public
      create  diary/misc/plugin
      create  diary/lib/tdiary/filter
      create  diary/lib/tdiary/style
      create  diary/js
      create  diary/theme
      create  diary/README.md
      create  diary/Gemfile
      create  diary/Gemfile.lock
      create  diary/config.ru
      create  diary/tdiary.conf.beginner
      create  diary/tdiary.conf.sample
      create  diary/tdiary.conf.sample-en
      create  diary/doc
      create  diary/doc/HOWTO-authenticate-in-rack.md
      create  diary/doc/HOWTO-make-io.md
      create  diary/doc/HOWTO-make-plugin.md
      create  diary/doc/HOWTO-make-theme.md
      create  diary/doc/HOWTO-testing-tDiary.md
      create  diary/doc/HOWTO-use-plugin.md
      create  diary/doc/HOWTO-write-tDiary.en.md
      create  diary/doc/HOWTO-write-tDiary.md
      create  diary/doc/INSTALL-cgi.md
      create  diary/doc/INSTALL-paas.md
      create  diary/doc/INSTALL-rack.md
      create  diary/doc/INSTALL.md
      create  diary/doc/README.en.md
      create  diary/doc/README.md
      create  diary/doc/UPGRADE.md
      create  diary/doc/doc.css
      create  diary/tdiary.conf
      create  diary/Gemfile.local
[DEPRECATED] `Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env` (called at /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/tdiary-5.2.4/lib/tdiary/cli.rb:23)
         run  bundle install --without test development from "./diary"
[DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set --local without 'test development'`, and stop using this flag
Bundler 2.4.13 is running, but your lockfile was generated with 2.3.7. Installing Bundler 2.3.7 and restarting using that version.
Fetching gem metadata from https://rubygems.org/.
Fetching bundler 2.3.7
Installing bundler 2.3.7
[DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set --local without 'test development'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Using rake 13.0.6
Using bundler 2.3.7
Using rexml 3.2.5
Fetching thor 1.2.1
Using hikidoc 0.1.0
Using mini_mime 1.1.2
Fetching timeout 0.3.0
Fetching rack 3.0.1
Using fastimage 2.2.6
Fetching webrick 1.7.0
Fetching mail 2.7.1
Installing timeout 0.3.0
Fetching net-protocol 0.1.3
Installing thor 1.2.1
Installing webrick 1.7.0
Using emot 0.0.4
Installing net-protocol 0.1.3
Installing rack 3.0.1
Using net-smtp 0.3.3
Installing mail 2.7.1
Fetching rackup 0.2.3
Using tdiary 5.2.4
Installing rackup 0.2.3
Bundle complete! 28 Gemfile dependencies, 16 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
         run  bundle exec tdiary htpasswd from "./diary"
Input your username/password
Username: tambara
New password: 
Re-type new password: 
install finished
run `tdiary server` in diary directory to start server

サーバを起動してみる

> bundle exec tdiary server
/Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/file.rb:5: warning: Rack::File is deprecated and will be removed in Rack 3.1
[2023-05-20 09:51:17] INFO  WEBrick 1.7.0
[2023-05-20 09:51:17] INFO  ruby 3.2.2 (2023-03-30) [arm64-darwin22]
[2023-05-20 09:51:17] INFO  WEBrick::HTTPServer#start: pid=12696 port=19292

あがった。localhost:19292にアクセスしてみよう。

Rack::Lint::LintError: uppercase character in header name: Content-Type (Rack::Lint::LintError)
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/lint.rb:653:in `block in check_headers'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/lint.rb:637:in `each'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/lint.rb:637:in `check_headers'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/lint.rb:73:in `response'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/lint.rb:35:in `call'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/show_exceptions.rb:27:in `call'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/common_logger.rb:43:in `call'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/content_length.rb:20:in `call'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rackup-0.2.3/lib/rackup/handler/webrick.rb:94:in `service'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/webrick-1.7.0/lib/webrick/httpserver.rb:140:in `service'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/webrick-1.7.0/lib/webrick/httpserver.rb:96:in `run'
    /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/webrick-1.7.0/lib/webrick/server.rb:310:in `block in start_thread'
127.0.0.1 - - [20/May/2023:09:53:01 +0900] "GET / HTTP/1.1" 500 40600 0.0290
127.0.0.1 - - [20/May/2023:09:53:01 JST] "GET / HTTP/1.1" 500 40600
- -> /

あら?

というわけで、動かない。調べるか・・・

とりあえず、この設定だとマシンの外部からアクセス出来てしまう。ローカルでだけ使いたい。

cli.rbをみると、serverコマンドにオプションを付ければ良さそうだ。

(前略)
        desc "server", "Start tDiary server"
        method_option "rack", type: :string, banner:
            "start server with rack interface (default)"
        method_option "cgi", type: :string, banner:
            "start server with cgi interface"
        method_option "bind", aliases: "b", type: :string, default: "0.0.0.0", banner:
            "bind to the IP"
        method_option "port", aliases: "p", type: :numeric, default: 19292, banner:
            "use PORT"
        method_option "log", aliases: "l", type: :string, banner:
            "File to redirect output"
        def server
(後略)

オプションbらしい。-bの形で指定すればいいのかな?

> bundle exec tdiary server -b localhost
/Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.1/lib/rack/file.rb:5: warning: Rack::File is deprecated and will be removed in Rack 3.1
[2023-05-20 11:42:10] INFO  WEBrick 1.7.0
[2023-05-20 11:42:10] INFO  ruby 3.2.2 (2023-03-30) [arm64-darwin22]
[2023-05-20 11:42:10] INFO  WEBrick::HTTPServer#start: pid=14501 port=19292

見た目変わらないが、これでLAN上の別のマシンからはアクセス出来なくなったのでOKっぽい。

さて、エラーの原因だけども、

Rack::Lint::LintError: uppercase character in header name: Content-Type (Rack::Lint::LintError)

と言われていて、ググった感じだとRackの3.0.0からレスポンスヘッダは小文字じゃないとダメみたい。HTTP ヘッダの大文字小文字がはどちらでもいいという認識だったけど、最近、変わったのだろうか。

さらに検索してみると、そのもののPRが見つかった。

Rack 3 で動かない箇所を直しました by hsbt · Pull Request #1068 · tdiary/tdiary-core · GitHub

これは5.2.4に含まれている問題みたい。 tDiary-5.2.4 リリース - tDiary.org

にも、動かなかったら5.2.3を使ってくれと書いてある。はーい。

> gem uninstall tdiary
Remove executables:
    tdiary

in addition to the gem? [Yn]  Y
Removing tdiary
Successfully uninstalled tdiary-5.2.4

> gem install tdiary -v 5.2.3
Fetching tdiary-5.2.3.gem
Successfully installed tdiary-5.2.3
Parsing documentation for tdiary-5.2.3
Installing ri documentation for tdiary-5.2.3
Done installing documentation for tdiary after 0 seconds
1 gem installed

今度は~lib/tdiaryで作ることにする。

> tdiary new lib/tdiary
      create  lib/tdiary
      create  lib/tdiary/public
      create  lib/tdiary/misc/plugin
      create  lib/tdiary/lib/tdiary/filter
      create  lib/tdiary/lib/tdiary/style
      create  lib/tdiary/js
      create  lib/tdiary/theme
      create  lib/tdiary/README.md
      create  lib/tdiary/Gemfile
      create  lib/tdiary/Gemfile.lock
      create  lib/tdiary/config.ru
      create  lib/tdiary/tdiary.conf.beginner
      create  lib/tdiary/tdiary.conf.sample
      create  lib/tdiary/tdiary.conf.sample-en
      create  lib/tdiary/doc
      create  lib/tdiary/doc/HOWTO-authenticate-in-rack.md
      create  lib/tdiary/doc/HOWTO-make-io.md
      create  lib/tdiary/doc/HOWTO-make-plugin.md
      create  lib/tdiary/doc/HOWTO-make-theme.md
      create  lib/tdiary/doc/HOWTO-testing-tDiary.md
      create  lib/tdiary/doc/HOWTO-use-plugin.md
      create  lib/tdiary/doc/HOWTO-write-tDiary.en.md
      create  lib/tdiary/doc/HOWTO-write-tDiary.md
      create  lib/tdiary/doc/INSTALL-cgi.md
      create  lib/tdiary/doc/INSTALL-paas.md
      create  lib/tdiary/doc/INSTALL-rack.md
      create  lib/tdiary/doc/INSTALL.md
      create  lib/tdiary/doc/README.en.md
      create  lib/tdiary/doc/README.md
      create  lib/tdiary/doc/UPGRADE.md
      create  lib/tdiary/doc/doc.css
      create  lib/tdiary/tdiary.conf
      create  lib/tdiary/Gemfile.local
[DEPRECATED] `Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env` (called at /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/tdiary-5.2.3/lib/tdiary/cli.rb:23)
         run  bundle install --without test development from "./lib/tdiary"
[DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set --local without 'test development'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Using rake 13.0.6
Using bundler 2.3.7
Fetching digest 3.1.0
Using thor 1.2.1
Using fastimage 2.2.6
Using hikidoc 0.1.0
Using mini_mime 1.1.2
Using timeout 0.3.0
Using webrick 1.7.0
Using rexml 3.2.5
Fetching rack 2.2.4
Using emot 0.0.4
Using mail 2.7.1
Using net-protocol 0.1.3
Installing digest 3.1.0 with native extensions
Installing rack 2.2.4
Fetching tdiary 5.2.4
Installing tdiary 5.2.4
Fetching net-smtp 0.3.1
Installing net-smtp 0.3.1
Bundle complete! 27 Gemfile dependencies, 16 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
         run  bundle exec tdiary htpasswd from "./lib/tdiary"
Input your username/password
Username: tambara
New password: 
Re-type new password: 
install finished
run `tdiary server` in lib/tdiary directory to start server

あ、あれ?tdiary 5.2.4がインストールされちゃった。

> bundle exec tdiary server -b localhost
bundler: failed to load command: tdiary (/Users/tambara/.rbenv/versions/3.2.2/bin/tdiary)
/Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/tdiary-5.2.4/lib/tdiary/cli.rb:129:in `server': uninitialized constant Rackup (NameError)

                ::Rackup::Server.start( opts )
                        ^^^^^^^^
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/tdiary-5.2.4/bin/tdiary:7:in `<top (required)>'
    from /Users/tambara/.rbenv/versions/3.2.2/bin/tdiary:25:in `load'
    from /Users/tambara/.rbenv/versions/3.2.2/bin/tdiary:25:in `<top (required)>'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:58:in `load'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:58:in `kernel_load'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:23:in `run'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli.rb:484:in `exec'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli.rb:31:in `dispatch'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/cli.rb:25:in `start'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/exe/bundle:48:in `block in <top (required)>'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors'
    from /Users/tambara/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.7/exe/bundle:36:in `<top (required)>'
    from /Users/tambara/.rbenv/versions/3.2.2/bin/bundle:25:in `load'
    from /Users/tambara/.rbenv/versions/3.2.2/bin/bundle:25:in `<main>'

案の定動かない。よくわからんけど、Gemfile.lockのtdiaryのバージョンを5.2.3に直してうごかしちゃった(笑)

あと、RDスタイルがないと困ってしまうので、探して入れた。