テクノロジー

【Rails+Unicorn】「NoMethodError: undefined method `namespace' for main:Object」の対策

ゆうき's icon'
  • ゆうき
  • 2020/05/01 16:24

同じようなトラブルにあった人のためのメモ。

 

途中から、本番のrailsサーバーの挙動(表示)がおかしくなって(見た目はrootエラー関連)、

The page you were looking for doesn't exist.

You may have mistyped the address or the page may have moved.

If you are the application owner check the logs for more information.

(Herokuとかではよく見かけるエラー表記。Googleで調べるとHerokuとRoutesのエラー情報がたくさん見つかりますが、これが表示されたからといって、必ずしもRailsのルーティングのミスとは限りません

 

サーバー(nginx)やunicornを再起動して確認してみた際に、unicornの再起動ができなくなっていたため、unicornのエラーログをのぞいたら、以下のような表記がありました。

[2020-05-01T00:10:06.424575 #3995] INFO -- : Refreshing Gem list bundler: failed to load command: unicorn_rails (/var/www/cscg_simu/shared/bundle/ruby/2.7.0/bin/unicorn_rails) NoMethodError: undefined method `namespace' for main:Object

(本番環境のunicornのstartが動作しない状態なので、当然restartやデプロイも成功しません)

調べても前例が殆ど無く、解決方法がわからなかったので、知人のハッカーにご相談。

 

namespaceをメソッドコールしてるのってcapistranoだけっぽい。

(current内にて「grep namespace **/*」で調査)

 

以下、ハッカーのアドバイス。

えーっと config/unicorn/production.rbに preload_app trueみたいな設定があるのですが

その設定があるとunicornのプロセス起動時にアプリのコードの読み込みをするのですが ロードパス上にあるrubyファイルを読み込むのでlib/capistrano/tasks/unicorn.rbも読み込んでしまっていて

そのファイル上でnamespaceという命令を読んでいるのですが、これを定義しているgem(たぶんcapistrano)がproduction環境で読み込まれてないから

「production.rb」の「preload_app true」と「lib/capistrano/tasks/unicorn.rb」の連携が悪さをしていた模様。

qiitaの環境構築の説明記事通りにやっていたのですが、まさか、こんなところに落とし穴があるとは、という感じでした。

 

 

対策:

つまり、unicornのプロセス起動時に「lib/capistrano/tasks/unicorn.rb」を読み込まないようにすれば良いわけですね。

 

その1。

lib/capistrano/tasks/unicorn.rb

lib/capistrano/tasks/unicorn.rake

に変更。

 

その2

Capfile:

Dir.glob("lib/capistrano/tasks/*.rb").each { |r| import r }

Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

に変更。

 

その3

unicornをプロセスキルして再起動。

(古いタスクが残っていると、デプロイは成功するのにunicornがエラーという現象が発生します)

 

 

この3つで問題は無事解決されました。

(´∀`)

 

Article tip 0人がサポートしています
獲得ALIS: Article like 74.67 ALIS Article tip 0.00 ALIS
ゆうき's icon'
  • ゆうき
  • @yuuki

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
テクノロジー

彼女でも分かるように解説:ディープフェイク

Like token Tip token
32.10 ALIS
Eye catch
他カテゴリ

ALISのシステム概観

Like token Tip token
5.00 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
テクノロジー

なぜ、素人エンジニアの私が60日間でブロックチェーンゲームを制作できたのか、について語ってみた

Like token Tip token
270.93 ALIS
Eye catch
テクノロジー

iOS15 配信開始!!

Like token Tip token
7.20 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
ゲーム

ドラクエで学ぶオーバフロー

Like token Tip token
30.10 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
テクノロジー

オープンソースプロジェクトに参加して自己肯定感を高める

Like token Tip token
85.05 ALIS