【rails】docker + rails + heroku 메일로 사용자 인증을 시도했을 때 http://localhost:3000/~에서 메일이 도착한다

8557 단어 경 6도커Rails

1. 일어나는 문제나 오류 메시지



비망록으로 남겨 둡니다.
팀원과 개발한 포트폴리오 중 하나를 heroku에 배포했습니다.
앱에 로그인했을 때 사용자 인증 메일이 도착하고 URL을 클릭하면 앱의 도메인 이름으로 전환하고 싶다는 이야기입니다.

docker+rails 환경에서 앱을 만들고 프로덕션 환경에 배포했습니다.
가입에 gem devise를 사용하고 있기 때문에, 가입하면 사용자 인증 메일이 도착합니다만, 기재의 URL을 클릭하면, localhost 형식의 URL로부터 메일이 도착해 버려, 사용자 인증을 할 수 없었습니다.

2. 관련이 있는 것 같은 소스 코드의 재검토



config/environments/production.rb
Rails.application.configure do


  # 本番環境用
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
  config.action_mailer.default_url_options = { host: 'サブドメイン名(アプリ名).herokuapp.com', protocol: 'https' }
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    user_name: ENV['USER_EMAIL'],
    password: ENV['EMAIL_PASSWORD'],
    authentication: 'plain',
    enable_starttls_auto: true
  }

end

production.rb의 설정에 실수는 없을 것 같은데, 왠지 localhost에 천이되는 상태가 되어 버렸습니다.

3. 문제에 부딪히기 전에 앱을 어떻게 배포했는지


heroku container:login
heroku container:push web -a アプリ名
heroku addons:attach postgresql名 -a アプリ名
heroku run rake db:migrate -a アプリ名
heroku open -a アプリ名

htps : // 이 m / 나 _ mp / ms / 57 d10717568 2160b
이 기사를 참고로 배포를 실행.
로그인을 시도하고 도착한 이메일에 기재된 URL을 클릭하면,
http://localhost:3000/users/confirmation?confirmation_token= ....
로 전환되어 사용자 인증을 할 수 없습니다.



실제로 '이메일 주소 확인'을 클릭하여 인증을 완료하려고 하면,http://localhost:3000/users/confirmation?confirmation_token=....라는 URL에 날아 버렸습니다.
그러나 실제로 앱을 사용할 수 없기 때문에,http://アプリドメイン名/users/confirmation?confirmation_token=....되기를 원했습니다.

4. 해결 방법



원래 dockerfile 설정에 실수의 원인이있었습니다.
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
ENV LANG C.UTF-8
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

마지막 CMD ["rails", "server", "-b", "0.0.0.0"] 때문이었습니다.
배포 할 때이 명령은 개발 환경을 실행한다는 것을 의미하며 개발 환경을 배포합니다. 라는 것을 알았습니다. 무슨 뜻인가 하면 production.rb를 아무리 편집해도 프로덕션 환경을 배포하지 않았기 때문에 아무런 의미가 없었다는 것입니다.

이번에는 developments.rb를 편집하고 보내기로 결정했습니다.

deveopment.rb
Rails.application.configure do

   # 本番環境用
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
  #編集前
  #config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  #編集後
  config.action_mailer.default_url_options = { host: 'サブドメイン名(アプリ名).herokuapp.com', protocol: 'https' }

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    user_name: ENV['USER_EMAIL'],
    password: ENV['EMAIL_PASSWORD'],
    authentication: 'plain',
    enable_starttls_auto: true
  }

end


development.rbconfig.action_mailer.default_url_options를 프로덕션 용으로 편집했습니다.
그 자리에서 능가하지만 메일러를 보내는 기본 도메인을 localhost에서 프로덕션 도메인 이름으로 변경했습니다.
이렇게 수정하고 다시 배포하고 사용자 인증 메일의 URL을 클릭하면 무사히 프로덕션 도메인으로 전환되어 사용자 인증을 성공시킬 수 있었습니다.

배포는 오류가 붙기 때문에 힘들다고 느끼는 사람도 많다고 생각합니다.
저도 오랜만에 배포하고 이번 오류에 부딪혔습니다. 실제로 skype를 연결하면서 기사를 참고로 시도했지만 좀처럼 잘하지 않고, 현장의 엔지니어의 아는 사람에게 지혜를 빌려주고 해결했습니다. 솔직히 docker도 heroku도 rails도 지식이 부족하지 않고, 아직도 공부 부족이라고 통감했습니다.

좋은 웹페이지 즐겨찾기