gattin1 / K.IApplication

0 stars 0 forks source link

googleログイン機能(本番環境)についての質問 #56

Open gattin1 opened 2 months ago

gattin1 commented 2 months ago

お疲れ様です。googleログイン機能で詰まっていて助けていただきたいです

実装したいもの・解決したいもの googleログイン機能が開発環境までは実装できたのですが本番環境へのデプロイができません。開発環境のcredentials.yml.encから新しいクライアントIDとクライアントシークレットに編集してurlを本番環境用にするところまではできたのですがデプロイ時エラーが発生しています。

Image from Gyazo

credentilals.yml.enc

Rails.application.credentials.google
irb(main):002> 
=> 
{:google_client_id=>
  "106377811588-dcj4pj2l2fcnibg15bsfjdn16jeq6l7s.apps.googleusercontent.com",
 :google_client_secret=>"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"}

config/initializers/devise.rb

                  Rails.application.credentials.google[:google_client_id],
                  Rails.application.credentials.google[:google_client_secret],
                  skip_jwt: true

compose.yml

 services:

  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    command: bash -c "bundle install && bundle exec rails db:prepare && rm -f tmp/pids/server.pid && ./bin/dev"
    tty: true
    stdin_open: true
    volumes:
      - .:/myapp
      - bundle_data:/usr/local/bundle:cached
      - node_modules:/myapp/node_modules
    environment:
      TZ: Asia/Tokyo
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_REGION: ${AWS_REGION}
      S3_BUCKET_NAME: ${S3_BUCKET_NAME}
      MYAPP_DATABASE_PASSWORD: password
      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}

.env

S3_BUCKET_NAME=onekanjidiary
GOOGLE_CLIENT_ID=106377811588-dcj4pj2l2fcnibg15bsfjdn16jeq6l7s.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=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

エラー内容

------
 > [build 9/9] RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile:
1.690 bin/rails aborted!
1.691 NoMethodError: undefined method `[]' for nil (NoMethodError)
1.691 
1.691                   Rails.application.credentials.google[:google_client_id],
1.691                                                       ^^^^^^^^^^^^^^^^^^^
1.691 /rails/config/initializers/devise.rb:276:in `block in <main>'
1.691 /rails/config/initializers/devise.rb:11:in `<main>'
1.691 /rails/config/environment.rb:7:in `<main>'
1.691 Tasks: TOP => environment
1.691 (See full trace by running task with --trace)
------
Error: failed to fetch an image or build from source: error building: failed to solve: process "/bin/sh -c SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile" did not complete successfully: exit code: 1

エラーの意味とエラー内容から推測される原因

google_client_idがないと言われているのでcredentials.yml.encだけでなく.envに環境設定をしたりしたのですが解決できないです

実装する際に参考にした資料 https://zenn.dev/redheadchloe/articles/81dec8a2ba5e4a https://qiita.com/iloveomelette/items/b6e65caea88b6e86cfdd

エラーを解決するために調べた資料 英語で調べたりしたのですが調べ方が悪いのかそれらしき記事は見つけられませんでした

gattin1 commented 2 months ago

initializer/devise.rb

config.omniauth :google_oauth2,
                  Rails.application.credentials.google[:google_client_id],
                  Rails.application.credentials.google[:google_client_secret],
                  skip_jwt: true
kenchasonakai commented 2 months ago

原因の切り分けが難しくなるので、まずはcredentialを使うのか環境変数を使うのか技術選定を行ってどちらを使用するのか決めましょう

環境変数を使用してGoogleログイン用の認証情報等を扱う場合はFly.io側に環境変数を渡すためにはどうすればよいかを調べる

credentialを使用する場合はRAILS_MASTER_KEYという環境変数でmaster.keyの値をFly.io側に渡せているかを確認する、credentials.yml.encがきちんとgit管理されてFly.io上から参照されているかを確認する

みたいなプロセスでやっていく感じかなと思いました