#ruby #docker #rubygems #local
#ruby #docker #rubygems #Местные новости
Вопрос:
В качестве последнего ресурса, прежде чем я отброшу весь этот рефакторинг, я задаю этот вопрос здесь. Я сталкиваюсь с этим странным поведением. Я новичок в Ruby, поэтому, скорее всего, я что-то делаю неправильно.
Я извлек некоторые общие функции в локальный драгоценный камень, который работает при локальном запуске приложения Sinatra (это простое приложение Github).
Но когда я пытаюсь запустить контейнер Docker, кажется, что вызовы Gem выполняются только после завершения работы (Ctrl c) приложения (журналы появляются после завершения работы Sinatra).).
Для создания образа я выполняю следующие действия:
FROM ruby:slim-buster
ARG GITHUB_APP_IDENTIFIER
ARG GITHUB_WEBHOOK_SECRET
ARG GITHUB_PRIVATE_KEY
ARG ACCESS_TOKEN
RUN apt update amp;amp; apt install -y git --no-install-recommends
COPY LineEnding/line_ending.rb LineEnding/Gemfile LineEnding/Gemfile.lock /line_ending/
COPY github_gem/ /github_gem
WORKDIR /github_gem
RUN gem install bundler amp;amp; bundle install
RUN gem install github_gem-0.1.0.gem
WORKDIR /line_ending
RUN bundle install
ENV GITHUB_APP_IDENTIFIER ${GITHUB_APP_IDENTIFIER}
ENV GITHUB_WEBHOOK_SECRET ${GITHUB_WEBHOOK_SECRET}
ENV GITHUB_PRIVATE_KEY ${GITHUB_PRIVATE_KEY}
ENV ACCESS_TOKEN ${ACCESS_TOKEN}
EXPOSE 3001
CMD ["ruby", "line_ending.rb"]
При локальном запуске работает отлично, и журналы выглядят так:
В качестве еще одной информации я попытался передать журналы в Docker следующим образом:
def initialize
docker_stdout = IO.new(IO.sysopen("/proc/1/fd/1", "w"),"w")
@logger = Logger.new(docker_stdout)
@logger.level = Logger::DEBUG
end
Это не имело никакого значения, как STDOUT, так и docker_stdout ведут себя одинаково.
Полный журнал ошибок:
[2020-11-17 10:20:48] INFO WEBrick 1.6.0
[2020-11-17 10:20:48] INFO ruby 2.7.2 (2020-10-01) [x86_64-linux]
== Sinatra (v2.0.4) has taken the stage on 3001 for development with backup from WEBrick
[2020-11-17 10:20:48] INFO WEBrick::HTTPServer#start: pid=1 port=3001
D, [2020-11-17T10:21:00.306766 #1] DEBUG -- : request
D, [2020-11-17T10:21:00.308179 #1] DEBUG -- : Authenticate app
D, [2020-11-17T10:21:00.308209 #1] DEBUG -- : 2020-11-17 10:21:00.308206249 0000
D, [2020-11-17T10:21:00.308245 #1] DEBUG -- : 1605608460
D, [2020-11-17T10:21:00.308290 #1] DEBUG -- : 1605609060
D, [2020-11-17T10:21:00.312411 #1] DEBUG -- : Get installation key
WARNING: The preview version of the Integrations API is not yet suitable for production use.
You can avoid this message by supplying an appropriate media type in the 'Accept' request
header.
2020-11-17 10:21:08 - Faraday::ConnectionFailed - Failed to open TCP connection to github.com:443 (getaddrinfo: Temporary failure in name resolution):
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/local/lib/ruby/2.7.0/timeout.rb:95:in `block in timeout'
/usr/local/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/local/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/local/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/local/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter/net_http.rb:152:in `request_via_request_method'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter/net_http.rb:137:in `request_with_wrapped_block'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter/net_http.rb:128:in `perform_request'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter/net_http.rb:70:in `block in call'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter.rb:61:in `connection'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/adapter/net_http.rb:68:in `call'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/response.rb:11:in `call'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/response.rb:11:in `call'
/usr/local/bundle/gems/octokit-4.19.0/lib/octokit/middleware/follow_redirects.rb:73:in `perform_with_redirection'
/usr/local/bundle/gems/octokit-4.19.0/lib/octokit/middleware/follow_redirects.rb:61:in `call'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/request/retry.rb:148:in `call'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/rack_builder.rb:154:in `build_response'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/connection.rb:492:in `run_request'
/usr/local/bundle/gems/faraday-1.1.0/lib/faraday/connection.rb:279:in `post'
/usr/local/bundle/gems/sawyer-0.8.2/lib/sawyer/agent.rb:94:in `call'
/usr/local/bundle/gems/octokit-4.19.0/lib/octokit/connection.rb:156:in `request'
/usr/local/bundle/gems/octokit-4.19.0/lib/octokit/connection.rb:28:in `post'
/usr/local/bundle/gems/octokit-4.19.0/lib/octokit/client/apps.rb:78:in `create_app_installation_access_token'
/usr/local/bundle/gems/github_gem-0.1.0/lib/github_gem.rb:137:in `authenticate_installation'
line_ending.rb:69:in `block in <class:GHAapp>'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1635:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1635:in `block in compile!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1040:in `block in process_route'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1038:in `catch'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1038:in `process_route'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:983:in `block in filter!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:983:in `each'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:983:in `filter!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1096:in `block in dispatch!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `block in invoke'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `catch'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `invoke'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1094:in `dispatch!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:924:in `block in call!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `block in invoke'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `catch'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1076:in `invoke'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:924:in `call!'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:913:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/xss_header.rb:18:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/path_traversal.rb:16:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/json_csrf.rb:26:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/base.rb:50:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/base.rb:50:in `call'
/usr/local/bundle/gems/rack-protection-2.0.4/lib/rack/protection/frame_options.rb:31:in `call'
/usr/local/bundle/gems/rack-2.0.6/lib/rack/logger.rb:15:in `call'
/usr/local/bundle/gems/rack-2.0.6/lib/rack/common_logger.rb:33:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:231:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:224:in `call'
/usr/local/bundle/gems/rack-2.0.6/lib/rack/head.rb:12:in `call'
/usr/local/bundle/gems/rack-2.0.6/lib/rack/method_override.rb:22:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/show_exceptions.rb:22:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:194:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1957:in `call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1502:in `block in call'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1729:in `synchronize'
/usr/local/bundle/gems/sinatra-2.0.4/lib/sinatra/base.rb:1502:in `call'
/usr/local/bundle/gems/rack-2.0.6/lib/rack/handler/webrick.rb:86:in `service'
/usr/local/lib/ruby/2.7.0/webrick/httpserver.rb:140:in `service'
/usr/local/lib/ruby/2.7.0/webrick/httpserver.rb:96:in `run'
/usr/local/lib/ruby/2.7.0/webrick/server.rb:307:in `block in start_thread'
16.85.88.12 - - [17/Nov/2020:10:20:59 UTC] "POST /event_handler HTTP/1.1" 500 190501
- -> /event_handler
^C== Sinatra has ended his set (crowd applauds)
[2020-11-17 10:21:10] INFO going to shutdown ...
[2020-11-17 10:21:10] INFO WEBrick::HTTPServer#start done.
[2020-11-17 10:21:10] INFO WEBrick 1.6.0
[2020-11-17 10:21:10] INFO ruby 2.7.2 (2020-10-01) [x86_64-linux]
== Sinatra (v2.0.4) has taken the stage on 3001 for development with backup from WEBrick
[2020-11-17 10:21:10] INFO WEBrick::HTTPServer#start: pid=1 port=3001
^C== Sinatra has ended his set (crowd applauds)
[2020-11-17 10:21:10] INFO going to shutdown ...
[2020-11-17 10:21:10] INFO WEBrick::HTTPServer#start done.
D, [2020-11-17T10:21:00.306932 #1] DEBUG -- : ---- get payload
D, [2020-11-17T10:21:00.307577 #1] DEBUG -- : ---- verify webhook signature
D, [2020-11-17T10:21:00.308133 #1] DEBUG -- : ---- received event check_run
D, [2020-11-17T10:21:00.308160 #1] DEBUG -- : ---- action created
D, [2020-11-17T10:21:00.312187 #1] DEBUG -- : ---- authenticate Client
Комментарии:
1. На вашем первом скриншоте есть ошибка-обратная трассировка внутри (первые строки), которая показана не полностью. Можете ли вы прикрепить обратную трассировку в виде текста или изображения?
2. Пожалуйста, в виде текста. Не прилагайте скриншоты окон терминала к своим вопросам. Было бы лучше, если бы вы могли заменить приведенные выше изображения на обычный текстовый вывод процесса.
3. Конечно, я это сделаю.
4. В качестве обновления я продолжил тестирование, и приложение все-таки заработало. Также была проблема с сетью. НО ведение журнала по-прежнему происходит в странном порядке. Журналы из gem возвращаются только тогда, когда Sinatra возвращает управление. Нужно ли мне передавать регистратор в драгоценный камень? звучит странно.