sandbox-memo

開発してて出たエラーをメモる場所

nextjsのプロジェクトをcloudrunに載せるためにdocker化したら謎のエラーが出たのでメモ

github.com

nextjs公式のこちらを参考に、nextjsにdocker用のファイルなり設定を追加して、docker build -t nextjs-docker .からのdocker run -p 3000:3000 nextjs-dockerをした。

で、localhost:3000にアクセスすると、真っ白で、ターミナルに以下のエラーが出た。

TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)

日本語、英語でぐぐっても同様の症状の記事がなかったため、とりあえずプロジェクト内でhanderと記述してる部分をコメントアウトしてみたりしたけど変化なし。

上記リポジトリをcloneしてdocker build -t nextjs-docker .docker run -p 3000:3000 nextjs-dockerをしたらエラーは出なかったので、cloneしたディレクトリに現行プロジェクトのファイルを少しずつコピーしてエラーの原因を特定してみた。

すると、なんと、原因のファイルは/public/favicons/site.webmanifestだった。

{
  "name": "",
  "short_name": "",
  "icons": [
    {
      "src": "/favicons/android-chrome-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/favicons/android-chrome-256x256.png",
      "sizes": "256x256",
      "type": "image/png"
    }
  ],
  "theme_color": "#ffffff",
  "background_color": "#ffffff",
  "display": "standalone"
}

このwebmanifestファイルのnameが空だったために、エラーが出ていた模様。

nextjsもcloudrunも関係ないすごいしょーもないエラーに1.5日も詰まってしまって悔しい。

vueセットアップでエラー出た

ec2-user:~/environment/todo $ npm run dev

したら

todo@1.0.0 dev /home/ec2-user/environment/todo webpack-dev-server --inline --progress --config build/webpack.dev.conf.js

sh: webpack-dev-server: command not found npm ERR! file sh npm ERR! code ELIFECYCLE npm ERR! errno ENOENT npm ERR! syscall spawn npm ERR! todo@1.0.0 dev: webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! spawn ENOENT npm ERR! npm ERR! Failed at the todo@1.0.0 dev script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in: npm ERR! /home/ec2-user/.npm/_logs/2019-05-17T14_42_37_328Z-debug.log

ぐぐったらこれが出てきたので

qiita.com

npm install webpack-dev-server -g

したけど、

todo@1.0.0 dev /home/ec2-user/environment/todo webpack-dev-server --inline --progress --config build/webpack.dev.conf.js

module.js:550 throw err; ^

Error: Cannot find module 'webpack' at Function.Module.resolveFilename (module.js:548:15) at Function.Module.load (module.js:475:25) at Module.require (module.js:597:17) at require (internal/module.js:11:18) at Object. (/home/ec2-user/.nvm/versions/node/v8.16.0/lib/node_modules/webpack-dev-server/bin/webpack-dev-server.js:18:17) at Module.compile (module.js:653:30) at Object.Module.extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! todo@1.0.0 dev: webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the todo@1.0.0 dev script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in: npm ERR! /home/ec2-user/.npm/_logs/2019-05-17T14_46_24_350Z-debug.log

railsでコマンド叩いたらsqlite3のgemがなんたらというエラーが出た

$ rails generate controller home top

と叩いたら

/home/ec2-user/.rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/bundler/rubygems_integration.rb:408:in `block (2 levels) in replace_gem': Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile. (LoadError)

と言われた。いま有効になってるのがsqlite3-1.4.0だけど依存関係的に1.3.6がいいらしい。

なのでgemfileを開いて

gem 'sqlite3'

となっている行を

gem 'sqlite3', '~> 1.3.6'

に変更し、bundle install

エラーにならなくなったのでよかったよかった。

rails new blogしたらエラーでた

Getting Started with Rails — Ruby on Rails Guides

rails new blog

したら以下のようなエラーがでた。

An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  sqlite3
[vagrant@localhost blog]$ gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing sqlite3:
        ERROR: Failed to build gem native extension.

    current directory: /home/vagrant/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/sqlite3-1.3.13/ext/sqlite3
/home/vagrant/.rbenv/versions/2.5.3/bin/ruby -r ./siteconf20181125-6435-7i5da6.rb extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).

書いてあるとおり

gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/

をしてから

bundle update

してみたけど変わらずエラーが。

よく見たら下の方にsqlite-develいれろって書いてあるので

yum install sqlite-devel

したら解消できた。

rake db:createしようとしたらエラーが出た②

sandbox-memo.hatenablog.com

のあと、rake db:create:all をしてみたら別のエラーが出るようになった。

ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.

ということで、JSのruntimeがないらしい。

rubyracerがいるらしいので、

# gem 'therubyracer', platforms: :ruby

コメントアウトを外して bundle install して突破。

rake db:createしようとしたらエラーが出た②

sandbox-memo.hatenablog.com

のあと、rake db:create:all をしてみたら別のエラーが出るようになった。

ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.

ということで、JSのruntimeがないらしい。

rubyracerがいるらしいので、

# gem 'therubyracer', platforms: :ruby

コメントアウトを外して bundle install