SidekiqでNameError: uninitialized constant Net::HTTPがでた
Railsで外部のAPIサービスなどにアクセスする場合、
'net/http'を利用するかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 |
def post_to_remote_api target = "https://omohikane.com/api" headers = { "Content-Type" => "application/json" } uri = URI.parse(target) http = Net::HTTP.new(uri.host, uri.port) payload = { hoge: "aiu", fuga: "kakiku" } response = http.send_request("POST", uri.path, payload.to_json, headers) return response end |
Railsのプロセス内だとこれで問題なし。
期待通りにPOSTリクエストが実行できる。
しかし、SidekiqのWorkerJobの中で同じmethodを実行すると
NameError: uninitialized constant Net::HTTPが発生した。
RailsではなくSidekiqのプロセスだと
'net/http'をrequireしてくれていない様子。
なので、明示的にrequireする必要があると思う。
とりあえずmethod内に記述することでうごきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def post_to_remote_api require 'net/http' #<= 明示的にrequireする target = "https://omohikane.com/api" headers = { "Content-Type" => "application/json" } uri = URI.parse(target) http = Net::HTTP.new(uri.host, uri.port) payload = { hoge: "aiu", fuga: "kakiku" } response = http.send_request("POST", uri.path, payload.to_json, headers) return response end |
うーん。
Rails難しい。
じゃあね〜〜〜〜。