LoginSignup
6
1

More than 5 years have passed since last update.

[Backlog] backlog_kitを0.17.0に更新後NoMethodErrorが出る場合、スペースのドメイン設定に注意

Last updated at Posted at 2018-10-29

Backlog のAPI実行に backlog_kit(Ruby用のライブラリ) を使っていましたが、0.17.0に更新後エラーが出たので情報共有です。

関連仕様とエラーになる条件

Backlogでは 2017年9月にドメインの変更( .jp から .com ) がありましたが、それ以前に作成したスペースは .jp ドメインのままで運用されています。

backlog_kitの方は 0.17.0でデフォルトドメインの修正が入った ため、使っているスペースのドメインとbacklog_kitのバージョンの組み合わせにより問題が発生するようになりました。

  • 使っているスペースが .jpドメイン(2017年9月頃以前に作成) かつ
  • backlog_kit が 0.17.0 以降

あるいは、あまり無いパターンですが

  • 使っているスペースが .comドメイン(2017年9月頃以降に作成) かつ
  • backlog_kit が 0.16.0 以前

でこのエラーが発生します。

エラー内容

エラーが再現するスクリプトは以下になります。

test.rb
#!/usr/bin/ruby
# encoding: utf-8

require 'backlog_kit' # 0.17.0
require 'pp'

# セッション作成
client = BacklogKit::Client.new(
  space_id: '< .jp ドメインのスペースIDを設定>',
  api_key: '<APIキーを設定>'
) # key of user

# プロジェクト一覧を取得
result_obj = client.get('projects') # API: /api/v2/projects
puts PP.pp(result_obj,'')

.jp ドメインのスペースでこれを実行するとNoMethodErrorが発生します。

Traceback (most recent call last):
        13: from backlog_post_monthly_report_test2.rb:18:in `<main>'
        12: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/client.rb:97:in `get'
        11: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/client.rb:140:in `request'
        10: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/connection.rb:138:in `get'
         9: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/connection.rb:387:in `run_request'
         8: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/rack_builder.rb:143:in `build_response'
         7: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/request/multipart.rb:15:in `call'
         6: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/request/url_encoded.rb:15:in `call'
         5: from /var/lib/gems/2.5.0/gems/faraday_middleware-0.12.2/lib/faraday_middleware/response_middleware.rb:31:in `call'
         4: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:8:in `call'
         3: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:61:in `on_complete'
         2: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:9:in `block in call'
         1: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/response/file_parser.rb:9:in `on_complete'
/var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/response/file_parser.rb:19:in `decoded_filename': undefined method `match' for nil:NilClass (NoMethodError)

対応方法

環境変数 'BACKLOG_TOP_LEVEL_DOMAIN' を使っているスペースに合わせて設定すれば正常にAPI実行できるようになります。

test.rb
#!/usr/bin/ruby
# encoding: utf-8

require 'backlog_kit' # 0.17.0
require 'pp'

# ドメイン設定
ENV['BACKLOG_TOP_LEVEL_DOMAIN'] = 'jp'

# セッション作成
client = BacklogKit::Client.new(
  space_id: '< .jp ドメインのスペースIDを設定>',
  api_key: '<APIキーを設定>'
) # key of user

# プロジェクト一覧を取得
result_obj = client.get('projects') # API: /api/v2/projects
puts PP.pp(result_obj,'')

あるいは実行ユーザの環境変数に設定しても大丈夫です。

$ export BACKLOG_TOP_LEVEL_DOMAIN=jp
$ ruby test.rb
#<BacklogKit::Response:0x0000xxxxxxxxxx18
 @body=
  [#<BacklogKit::Resource:0x0000xxxxxxxxxx18
    @attributes=
     {:id=>99999,
      :projectKey=>"VATEST",
      :name=>"TESTプロジェクト",
      :chartEnabled=>false,
      :subtaskingEnabled=>true,
      :projectLeaderCanEditProjectLeader=>false,
      :useWikiTreeView=>true,
      :textFormattingRule=>"backlog",
      :archived=>false,
      :displayOrder=>0}>,
      ※以下省略※

使っているBacklogスペースが .com ドメインの場合で backlog_kit 0.16.0 以前を使う場合は、BACKLOG_TOP_LEVEL_DOMAIN を 'com' に設定して下さい。

エラーの原因

詳細は追っていないのですが、自分のドメインでない方にリクエストを投げた際、APIのレスポンスとしては 302 (Found) が返ってきていました。 backlog_kitが302をうまく処理できていないために発生しているものと思われます(他言語や別のAPIライブラリでも必ず起きる問題ではなさそうです)。

関連リンク

6
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1