20200206のGitに関する記事は2件です。

git pull についての備忘録

はじめに

  • 「git pull origin master」を実行することで、リモートリポジトリから最新の情報を取り込むことができる。
  • ここではgit pullがどういった動きで行われているかについて書く。

出てくる用語

  • origin: リモートリポジトリのURLの別名。
  • master: デフォルトのブランチの名前、メインのブランチ。リモートにもローカルにも存在。
  • origin/master:リモートリポジトリのmasterブランチを追跡しているローカルのブランチ。

git pullの中身

  • git pullは以下の行程を一気通貫で行うコマンド。

1.git fetch

  • リモートリポジトリから最新の情報をローカルリポジトリに持ってくることができる。

  • 持ってくる場所はローカルのmaterブランチではなくorigin/masterブランチに取り込む。

2.git merge

  • ブランチをmasterに反映させるコマンド。

  • origin/masterブランチの情報をローカルのmasterブランチに取り込む。

イメージ

image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Pythonでオウム返しをするLinebotのエラー対応

はじめに

QiitaやWEB上には、オウム返しLinebotの作り方は、たくさんあります。

参考
https://qiita.com/kro/items/67f7510b36945eb9689b
https://www.casleyconsulting.co.jp/blog/engineer/3028/

これらを参考に進めれば、基本作成完了しますが、
Herokuデプロイ時にエラーがたびたび発生し、私が初心者であるが故、エラー解消が結構大変でした。
なので、私が遭遇したエラーについて、対処法を記述していきます。

開発環境

OS:Widows10
Python3.7.6
Flask1.1.1
line-bot-sdk1.15.0

準備するファイル群

まず、main.py
サイトに載っているコピペで構わないと思います。
特に書き換えは必要なくいけました。

main.py
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os

app = Flask(__name__)
app.debug = False

YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

if __name__ == "__main__":
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

次に、Procfile
ここで、かなり時間を食ってしまいました。
まず、ProcfileはProcfile.txtはダメで、拡張子は付けません。
普段、テキストエディタを使用する人は、下記コードを打って、txtファイルで保存してしまいがちです。

作り方は、ターミナルを開いて、

$ echo web: python main.py > Procfile

と打つと、下記のファイルが作成されます。

Procfile
web: python main.py

これに気づくのに何時間かかったか。。。

次に、requirements
これは、requirements.txtです。
テキストエディタで下記のように作成します。

requirements.txt
Flask==1.1.1
line-bot-sdk==1.15.0

最後に、runtime
これも、runtime.txtです。
テキストエディタで下記のように作成します。

runtime.txt
python-3.7.6

これらのファイルを一つのフォルダにまとめれば、準備は完了です。

デプロイ

LinemessagingAPI,Heroku,Gitのインストールや登録等は省略します。

ターミナルを開いて、先ほどのファイル群が存在するフォルダに移動します。
今回は、line_botというフォルダを作成しました。

$cd C:\Users\user\line_bot

デプロイします。

$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master

エラーについて

fatal: 'heroku' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

私の場合、アクセストークンと、チャンネルシークレットの入力がうまくできていなかったため、下記を実行

$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app アプリケーション名
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app アプリケーション名
Setting YOUR_CHANNEL_ACCESS_TOKEN and restarting ⬢ アプリケーション名... done, v13
YOUR_CHANNEL_ACCESS_TOKEN:
アクセストークンの欄の文字列

このように表示されれば登録されています。

次に、

Scaling dynos... !
 !    Couldn't find that process type (web).

この場合、

heroku ps:scale web=1

を入力するとエラー回避できました。

image.png

総括

エラーに関して、ファイルを準備する段階でタイプミスがほとんどでした。
ファイルを準備する際には、細心の注意を払い、大文字小文字などのスペルミスに注意して準備してください。

初めての投稿で、へたくそでしたが
最後までお読みいただきありがとうございました。
もう少し、きちんと書くべきでした。

この記事が少しでも誰かのお役に立てれば幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む