[RUBY] Stellen Sie Line Bot mit Rails5 + Docker + Heroku Note bereit

Ziel

Voraussetzungen

Bau einer RoR-Entwicklungsumgebung

$ mkdir Linebot
$ cd Linebot
$ vi Dockerfiles

Dockerfile


# ruby2.3.Führen Sie den folgenden Befehl auf der Bildebene der 3-Deklaration aus
FROM ruby:2.3.3
# apt-get ist wie ein Paketmanager
#Update-Liste mit Update & Installation der erforderlichen Pakete
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

#Arbeitsverzeichnis erstellen und einrichten
RUN mkdir /app_name 
##APP den Arbeitsverzeichnisnamen_Zuweisen zu ROOT und$APP_Referenz mit ROOT
ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

#Hostseite (lokal) Gemfile hinzufügen
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

#Gemfile Bundle installieren
RUN bundle install
ADD . $APP_ROOT
$ vi docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: postgres:13.0
    environment:
      POSTGRES_PASSWORD: 'postgres'
    ports:
      - "3306:3306"

  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app_name
    ports:
      - "3000:3000"
    depends_on:
      - db

Starten Sie einen Container namens web und db

$ touch Gemfile.lock
$ vi Gemfile

Gemfile


source 'https://rubygems.org'
gem 'rails', '~> 5.2.2'
$ docker-compose run app rails new . --force --database=postgresql --skip-bundle
$ docker-compose build -d
$ docker-compose up -d web

Die Option -d wird im Trennmodus gestartet (wird im Backend ohne Protokollierung ausgeführt). Wenn Sie das Protokoll anzeigen möchten, können Sie es entfernen. Wenn Sie es jedoch stoppen, wird auch der Container gestoppt, sodass dies problematisch ist

/config/database.yml


default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: db
  username: postgres
  password: postgres
....
production:
  <<: *default
  database: app_name_production
  username: postgres
  password: <%= ENV['APP_NAME_DATABASE_PASSWORD'] %>

Schreiben Sie, dass postgresql in der Entwicklung und Produktion verwendet wird Bei der Verwendung von Heroku, das später beschrieben wird, ist postgresql der Standard, daher ist es gut. Nun, es ist okay, MySQL zu verwenden

Gemfile


#Für die LINE-API
gem 'line-bot-api'

#Zum Verwalten von Zugriffstoken usw.(Verwaltung von Umgebungsvariablen)
gem 'dotenv-rails'

#postgresql für Heroku-Umgebung
gem 'pg'
$ docker-compose run web bundle install
$ docker-compose run web rails db:create
$ docker-compose run web rails g controller top index
$ docker-compose run web rails g controller linebot collback

Ich werde wütend, wenn ich keine Datenbank erstelle Heroku braucht einen oberen Bildschirm, also machen wir jetzt alles (Ich denke nicht, dass es gut ist, direkt mit der Lautstärke zu spielen, nicht nur Befehle, sondern sie zu ignorieren)

routes.rb


post '/callback' => 'linebot#callback'
root 'top#index'

/app/controllers/linebot_controller


class LinebotController < ApplicationController
    require 'line/bot'  # gem 'line-bot-api'

  #Deaktivieren Sie die CSRF-Tokenauthentifizierung für Rückrufaktionen
  protect_from_forgery :except => [:callback]

  def client
    @client ||= Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
  end

  def callback
    body = request.body.read

    signature = request.env['HTTP_X_LINE_SIGNATURE']
    unless client.validate_signature(body, signature)
      head :bad_request
    end

    events = client.parse_events_from(body)

    events.each { |event|
      case event
      when Line::Bot::Event::Message
        case event.type
        when Line::Bot::Event::MessageType::Text
          message = {
            type: 'text',
            text: event.message['text']
          }
          client.reply_message(event['replyToken'], message)
        when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video
          response = client.get_message_content(event.message['id'])
          tf = Tempfile.open("content")
          tf.write(response.body)
        end
      end
    }

    head :ok
  end
end
$ touch .env

.env


LINE_CHANNEL_SECRET=XXXXXXXXXXX
LINE_CHANNEL_TOKEN=XXXXXXXXXXX

Schreiben Sie für XXXXXXXXXXX den Line Developers-Typ, den Sie später erstellen werden. Wenn Sie einen lokalen Container löschen möchten $ docker-compose down OK, wenn du es mit machst Wenn Sie es mit Ctl + C fallen lassen $ rm tmp/pids/server.pid Es ist besser zu tun

In Heroku bereitstellen

$ vi heroku.yml

heroku.yml


build:
  docker:
    web: Dockerfile
run:
  web: bundle exec puma -C config/puma.rb

Sie können nicht bauen, ohne dies zu schreiben Es scheint, dass heroku.yml die Entwicklung / Produktion und die zugehörige Datenbank wechseln kann (nicht erledigt)

$ heroku login
$ heroku create
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku container:login
$ heroku container:push web
$ git init
$ heroku git:remote -a <Ihr Heroku-Repository-Name>
$ git add .
$ git commit -am "Netter Kommentar"
$ heroku stack:set container
$ git push heroku master
$ heroku container:release web
$ heroku open

Wenn Sie den Zweig nicht schneiden können, können Sie ihn wie git hinzufügen, festschreiben und mit heroku push aktualisieren. Hier sind Container-Push und Image-Push unübersichtlich, daher ist es möglicherweise besser, nicht zu viel zu imitieren

――Wenn etwas mit dem Server nicht stimmt $ heroku restert Sie sollten versuchen zu schlagen --Wenn Sie das Protokoll überprüfen möchten $ heroku logs --tail Deo k

Verbinden Sie Leitungskanäle und Container

--Erstellen Sie einen Kanal mit der Messaging-API

Bonus

Ich möchte testen, aber nicht bereitstellen! Ich möchte es lokal veröffentlichen! Sie können ngrok verwenden

Ich möchte vorerst eine Anfrage zur Bestätigung senden! Verwenden Sie den Talend API Tester

Artikel, die gepflegt wurden

LINE Bot Development Super Einführung (Teil 1) Von Null bis Antwort https://qiita.com/nkjm/items/38808bbc97d6927837cd

Erstellen Sie mit Docker Compose eine containergestützte Rails-App und stellen Sie sie für Heroku bereit https://qiita.com/akirakudo/items/16a01271b0a39316e439

Rails5 + MySQL on Docker-Umgebungskonstruktion durch zu höfliches Docker-Compose (Docker für Mac) https://qiita.com/azul915/items/5b7063cbc80192343fc0

Recommended Posts

Stellen Sie Line Bot mit Rails5 + Docker + Heroku Note bereit
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Ich habe einen LINE Bot mit Rails + Heroku gemacht
[Schienen] Getriebe mit LINE Bot schieben
Stellen Sie Rails on Docker für Heroku bereit
Heroku: Docker: Bereitstellen
Stellen Sie Heroku mit Rails6 (Cloud9 + Ubuntu) + MySQL bereit
Bereitstellung mit EC2 / Docker / Laravel
Führen Sie Rails immer im Docker aus
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
[Docker] Wird immer mit Docker + Rails verwendet
Stellen Sie das Docker-Image von Flask in Heroku bereit
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Heroku entfalten
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Stellen Sie die Anwendung mit VPC + EC2 + Docker bereit.
Linienbot
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
So erstellen Sie eine Rails 6-Umgebung mit Docker
Einführung in Rspec mit Ruby on Rails x Docker
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
Fehler beim Bereitstellen von Rails5 + MySQL auf Heroku mit Docker-Compose
[Rails] So erstellen Sie eine Umgebung mit Docker
Einfacher LINE BOT mit Java Servlet
Mit Rails + Docker einfach Hallo Welt anzuzeigen
Beachten Sie, dass ich feststeckte, als ein Papagei LINE Bot mit Heroku + Sinatra zurückgab
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
Bereitstellen von einem lokalen Docker-Image auf Heroku
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
Fehler beim Bereitstellen von Docker auf Schienen mit Notizen
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker