$ 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
$ 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
$ heroku bash
Es ist gut, es zu sehen, indem Sie den Befehl cat mit drücken (der Punkt des Zorns ist, dass vim nicht verwendet werden kann)--Erstellen Sie einen Kanal mit der Messaging-API
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
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