質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

1169閲覧

Docker+Sinatraでtwitterに投稿できるようにしたい

begenner

総合スコア79

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/02/26 20:55

Docker初心者です。
現在twitterAPIを利用してrubyで投稿するサンプルを RubyでTwitter Botを作ってHerokuで動かす - あかんわ を参考にDockerを利用して作成、動作確認をしていますが、

  • docker-compose run app bundle exec ruby tweer.rbを実行してもtweetされない
  • 必要ファイル作成後にdocker-compose build実行、docker-compose upを実行すると下記が表示される

bash

1Recreating xxx_app_1 ... done 2Attaching to xxx_app_1 3app_1 | The Gemfile's dependencies are satisfied 4xxx_app_1 exited with code 0
  • 上記URLのアプリをDockerを使用せずにコピペして作成、

bundle exec ruby tweet.rbを実行するとtweetがされている

といった状況で原因が全くわかりません(m_ m)
もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m
_m)

動作環境

OS: mac
Ruby: 2.6.5

gemver
twitter7.0.0
Sinatra2.0.8.1

エラー内容

  • terminalでdocker-compose run app bundle exec ruby tweet.rbを実行してもtwitterに投稿されない

期待する動作

  • terminalで

bash

1docker-compose run app bundle exec ruby tweet.rb 2# or 3docker-compose up

を実行するとtwitterに投稿されるようにしたい

該当しそうなコード(docker-compose run app bundle exec ruby tweet.rbを実行するためだけのファイル)

  • ディレクトリ構造
. ├── Dockerfile ├── Gemfile ├── Gemfile.lock ├── app.rb ├── config.ru ├── docker-compose.yml ├── docker-entrypoint.sh ├── readme.md ├── tweet.rb └── twitter_api.env
  • Dockerfile

docker

1FROM ruby:2.6.5-stretch 2 3WORKDIR /app 4 5COPY Gemfile Gemfile.lock ./ 6RUN bundle install 7 8COPY docker-entrypoint.sh / 9RUN chmod +x /docker-entrypoint.sh 10ENTRYPOINT ["/docker-entrypoint.sh"] 11 12COPY . ./ 13 14CMD ["bundle", "exec", "ruby", "tweet.rb"] 15EXPOSE 4567
  • docker-compose.yml

docker

1version: '3' 2 3services: 4 app: 5 build: . 6 7 env_file: twitter_api.env 8 ports: 9 - "10080:4567" 10 11 tty: true 12 stdin_open: true 13 14 volumes: 15 - .:/app 16 - app-bundle:/usr/local/bundle 17 18volumes: 19 app-bundle:
  • docker-entrypoint.sh

bash

1#!/bin/bash 2 3set -eu 4 5# 必要であればBundlerでgemをインストールする 6bundle check || bundle install 7 8exec "$@" 9
  • Gemfile

ruby

1# frozen_string_literal: true 2 3source "https://rubygems.org" 4 5git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } 6 7gem "sinatra", "~> 2.0.5" 8gem 'twitter' 9gem 'dotenv'
  • Gemfile.lcok

ruby

1GEM 2 remote: https://rubygems.org/ 3 specs: 4 addressable (2.7.0) 5 public_suffix (>= 2.0.2, < 5.0) 6 buftok (0.2.0) 7 byebug (11.1.1) 8 coderay (1.1.2) 9 domain_name (0.5.20190701) 10 unf (>= 0.0.5, < 1.0.0) 11 dotenv (2.7.5) 12 equalizer (0.0.11) 13 ffi (1.12.2) 14 ffi-compiler (1.0.1) 15 ffi (>= 1.0.0) 16 rake 17 http (4.3.0) 18 addressable (~> 2.3) 19 http-cookie (~> 1.0) 20 http-form_data (~> 2.2) 21 http-parser (~> 1.2.0) 22 http-cookie (1.0.3) 23 domain_name (~> 0.5) 24 http-form_data (2.2.0) 25 http-parser (1.2.1) 26 ffi-compiler (>= 1.0, < 2.0) 27 http_parser.rb (0.6.0) 28 memoizable (0.4.2) 29 thread_safe (~> 0.3, >= 0.3.1) 30 method_source (0.9.2) 31 multipart-post (2.1.1) 32 mustermann (1.1.1) 33 ruby2_keywords (~> 0.0.1) 34 naught (1.1.0) 35 pry (0.12.2) 36 coderay (~> 1.1.0) 37 method_source (~> 0.9.0) 38 pry-byebug (3.8.0) 39 byebug (~> 11.0) 40 pry (~> 0.10) 41 public_suffix (4.0.3) 42 rack (2.2.2) 43 rack-protection (2.0.8.1) 44 rack 45 rake (13.0.1) 46 ruby2_keywords (0.0.2) 47 simple_oauth (0.3.1) 48 sinatra (2.0.8.1) 49 mustermann (~> 1.0) 50 rack (~> 2.0) 51 rack-protection (= 2.0.8.1) 52 tilt (~> 2.0) 53 thread_safe (0.3.6) 54 tilt (2.0.10) 55 twitter (7.0.0) 56 addressable (~> 2.3) 57 buftok (~> 0.2.0) 58 equalizer (~> 0.0.11) 59 http (~> 4.0) 60 http-form_data (~> 2.0) 61 http_parser.rb (~> 0.6.0) 62 memoizable (~> 0.4.0) 63 multipart-post (~> 2.0) 64 naught (~> 1.0) 65 simple_oauth (~> 0.3.0) 66 unf (0.1.4) 67 unf_ext 68 unf_ext (0.0.7.6) 69 70PLATFORMS 71 ruby 72 73DEPENDENCIES 74 dotenv 75 pry-byebug 76 sinatra (~> 2.0.5) 77 twitter 78 79BUNDLED WITH 80 1.17.2 81
  • tweet.rb

ruby

1require 'dotenv' 2require 'twitter' 3 4class Tweet 5 6 def initialize 7 @text = ["ちゃうねん", 8 "せやないねん", 9 "どないやねん", 10 "ええねん", 11 "これや!!", 12 "いけるで!!", 13 "こっからや!!"] 14 15 @client = Twitter::REST::Client.new do |config| 16 config.consumer_key = ENV['TWITTER_CONSUMER_API_KEY'] 17 config.consumer_secret = ENV['YOUR_CONSUMER_API_SECRET_KEY'] 18 config.access_token = ENV['TWITTER_ACCESS_TOKEN'] 19 config.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET'] 20 end 21 end 22 23 def random_tweet 24 tweet = @text[rand(@text.length)] 25 update(tweet) 26 end 27 28 private 29 30 def update(tweet) 31 begin 32 @client.update(tweet) 33 rescue => e 34 nil #TODO 35 end 36 end 37 38end 39 40# random_tweetを実行する 41if __FILE__ == $0 42 Tweet.new.random_tweet 43end 44

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/03/23 10:34

Dockerfileの「COPY . ./」行は意味がわかって記述していますか? さらにENTRYPOINTとCMDについては理解されていますか? これらを理解した上で、Dockerインスタンス内でスクリプトを実行してみて、動作するか確認すると、状況が把握しやすくなるかと思います。
guest

回答1

0

DockerfileのENTRYPOINT以下の挙動があやしそうです。
ちゃんと動かしてみないとわかりませんが、一旦

COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

この3行をコメントアウトした状態でもう一度docker-compose up --buildしてみてください。

投稿2020/02/29 10:33

inductor

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

begenner

2020/02/29 23:27

返信いただきありがとうございます。 ご指摘いただいた通りDockerfileの対象3行をコメントアウトしましたが ・twitterには投稿されていない ・terminalのコンソールには xxx_app_1 exited with code 0 ・terminalで docker-compose run app bundle exec ruby tweet.rb を実行してみたがtwitterには投稿されていない と表示されてしまい動作がうまくいきません(m_ _m)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問