何かメモリたいブログ

何かメモリたい

久しぶりにDokku (0.29.0)でruby-getting-startedやったら色々ハマったのでメモ

久しぶりにDokku触りたくなったのでDigitalOceanruby-getting-startedやってたら2日位ハマったのでメモ。

$ dokku -v
dokku version 0.29.0

とりあえず動くまでにやったこと

  • DropletBasic ($6/mo)のMemory 1GBだとビルド中エラーが起こるので Basic ($12/mo) のMemory 2GBにする。

  • Rails 5系なのでRubyは2.5.xを使う。(Ruby 3.xは使わない。)(使えない?)

  • bundle lock --add-platform x86_64-linuxでプラットフォームを追加する。

  • app/assets/config/manifest.jsを設置する

app/assets/config/manifest.js

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
  • gem 'psych', '~> 3.1' を追加する。

  • その他良く分からないエラーが起きたらホストでdokku repo:purge-cache ruby-getting-started

そんなにハマらなかったエラー

とりあえずプラットフォーム追加、manifest.jsはログが出てたので、それで対処しただけ。

メモリ不足はググったらStackoverflowの記事が出てきて(URL無くした)、そういうものかと思ってDropletをResizeしたらビルドが動くようになった。

Rails5のに関しては結構ハマってしまい、最初とりあえず Ruby 3.1.3でやるか!って思ってGemfile

ruby '3.1.3'

とか書いてデプロイしたらwrong number of arguments (given x, expected x) (ArgumentError)みたいなエラーが出てわけ分からなくなってしまいちょっと詰まった。

(wrong number of arguments (given x, expected x) (ArgumentError)みたいなエラーはアホみたいに遭遇した)

Rails5.2はRuby2.5.xが推奨とのことなので、指定を2.5.9に変更した。

結構ハマったエラー

wrong number of arguments (given x, expected x) (ArgumentError)系のエラーはめちゃくちゃ出て、ググるたびに解決方法が違って混乱したけど、とりあえず Gemfile

- gem 'psych', '~> 3.1' 

を追加するという解決方法が出てきて追記したらそのエラーは直った。

が今度はRuby 2.5.9psych ~>3.1を使ってるにも関わらず、dokkuのエラーログにruby 2.5.0の文字列とpsych-5.0.1の文字列が...

--- ERROR REPORT TEMPLATE -------------------------------------------------------

       ```
       ArgumentError: wrong number of arguments (given 4, expected 1)
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/psych-5.0.1/lib/psych.rb:322:in `safe_load'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/safe_yaml.rb:31:in `safe_load'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:496:in `block (2 levels) in read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:495:in `wrap'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:495:in `block in read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/tar_reader.rb:116:in `seek'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:494:in `read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:547:in `block (2 levels) in verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/tar_reader.rb:29:in `new'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:546:in `block in verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/file_source.rb:30:in `open'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/file_source.rb:30:in `with_read_io'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:545:in `verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:526:in `spec'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/rubygems_integration.rb:209:in `spec_from_gem'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/source/rubygems.rb:167:in `install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/gem_installer.rb:54:in `install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:62:in `apply_func'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:57:in `block in process_queue'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:54:in `loop'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:54:in `process_queue'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'
       ```

Rails + DokkuでHello Worldしたいだけなのに、なぜここまで時間かかるのか...と思ったけど最初の方にデプロイしたコードのキャッシュとかがDokkuに残ってるのかと思い、キャッシュクリア系のコマンドが無いか探したら見つけた。

Repository Management

repo:purge-cache <app>                   # Deletes the contents of the build cache stored in the repository

なのでdokkuをホストしてるサーバーで下記のコマンドを実行...

$ dokku repo:purge-cache ruby-getting-started

そして改めてpush....

git push dokku master

........

..........

....................................................................

Getting Started with Ruby on Heroku (Doku)

やったぜ。

その他

Dokku Proというのが出てますね。

Dokkuの高機能版+WebUIみたいな感じなのかな。

今回久しぶりにDokku試すついでにLedokkuというDokkuにWebUIを提供してくれるOSS試したけど、まだ発展途上という感じで結局ホストでコマンド打ってチュートリアルを進める事になりました。