前回はこちら
ちょっとしたことなんだけど気付かないとハマっちゃうよねみたいな話し
今回は本当にしょうもないことで3日くらい溶かしてしまい反省している
またやってしまう可能性があるので、忘れないようにここに記しておく
自分に対しての備忘録
SCOPE設定に気を付けましょう
著者の場合、ローカル、ステージング、本番環境の3環境があり、それぞれテストをするということをやっています。
Slackのアプリ開発においては、Slack側で作ったアプリの設定でスコープの範囲を決めることに加えて、開発するアプリ側にもスコープ設定が必要になります。
SCOPE設定を変更する場合は
- すべての環境のSlackアプリのSCOPE設定を書き換える
- すべてのローカル環境のSCOPE設定を書き換える
事が必要になり、3環境あるので6箇所を同じにしておく必要があります
これをやらないと権限不足でエラーになるということが置きますので気を付けるように
ファイル周りで大いにハマる
Slackでファイルを扱う場合は、メッセージに添付されたファイルを以下のような形で取得する必要があります
input_document = requests.get(
url=file.get("url_private_download"),
headers={"Authorization": f"Bearer {client.token}"},
).content
取得したデータをよしなにしてあげればよいのですが、ここで先程言ったSCOPEの設定ができてないとうまくいきません。
files:read権限を付与してください。
僕はそのせいで数日を無駄にしたのですが、権限を付与していない場合にこれをやって何が起きるかというと、エラーが返ってくれば良いのに、こんなHTMLが返ってくるんです。
一見、データは取得できているように見えるのですが、そんなことは無いのでした。
僕の場合はローカルと本番ではSCOPE設定が問題なかったのですが、Stagingに権限が振られてないというアホなミスを犯したために気付くのにめちゃくちゃ時間がかかってしまった。
すぐにファイルを調べれば良かったんですけどね。
処理に使う一時ファイルは
os.remove(filepath)
して削除していたので確認するのをサボってしまった
Heroku環境上のファイルをダウンロードするには
こんなふうに書きます。ターミナルで実行
heroku ps:copy Heroku側のファイルパス --app=アプリ名 --output=ローカル側のファイルパス
という形。具体的にはこんな形で、Macのダウンロードフォルダにtmpフォルダのファイルが落ちてきます
heroku ps:copy tmp/temp.pdf --app=slack-timeline-stg --output=~/Downloads/temp.pdf
ファイルを確認しさえすれば、正しいファイルかどうかわかるのに、それをサボったがためにその後の処理が全然うまく行かなくて無限に時間を吸われてしまいましたとさ。
Herokuのフォルダ構成でハマる
一時ファイルをどこに保存するかということで、アプリのフォルダ直下に tmp フォルダを置いてそこに入れておこうと思ったんですよね。
一時ファイルは /tmp
に置くんだ!と書いてあったので。
それで律儀にフォルダ置いてみたんですけどなんかおかしい。なぜかというと
/tmp ←Herokuで最初から置いてあるディレクトリ
/app/tmp ←自分で作ったディレクトリ
こんな形になっていた訳です。なるほどそうだったのか…
デプロイしたプロジェクトはHeroku上では
/app
以下に入る。これ試験に出ますねきっと。
/tmp
でフォルダ指定して開発をする場合、ローカル環境も/tmp を確認するようにしましょう。
プロジェクトの中じゃなくて、ルートにあるtmpです。
僕はこれもまた全然違う場所(つまり先程プロジェクト内につくったtmpディレクトリ)を見ていて、おっかしいな、ファイルが作られないぞ何が悪いんだエラーも出ないのに…
という馬鹿なことをしておりました。ファイルは /tmp にできているのでそりゃエラー出ませんよね。
まとめ
幾多の苦難を乗り越えて、SlackでChatGPTを使うためのアプリの開発が進んでいます
無料で使えますので、是非トライしてみてください。
機能一覧はこちらをごらんください。