fukasawamoe / yoriyoi

1 stars 0 forks source link

本番環境でアップローダーcloudinaryのActiveStorage::IntegrityErrorが出てしまう #95

Closed fukasawamoe closed 9 months ago

fukasawamoe commented 9 months ago

猫ちゃんのDB化を進めている中で、画像の変更ができるようにactivestrageとcloudinaryを使用して実装を行っています。 現時点では、ローカル環境ではcloudinaryからデータを取ってきてhome/index画面でAIのアバターとして変更できるのですが、 Image from Gyazo

本番環境だと会員登録→ログインのタイミングでエラーになってしまいます Image from Gyazo

一応ログインはできており、ログイン後の画面が以下になります Image from Gyazo

おそらく、画像の生成がうまくいっていないと思うのですが、(ユーザーモデル作成時にキャラクターモデルも一緒に作成するようにしています)

ログを確認すると、以下のようなエラーが出ておりchatGPTによると

これは、Cloudinary の設定に問題があることを示しています。特に cloud_name の値が期待されている値ではない、あるいはCloudinaryアカウント設定の問題があることを意味します。 とのことでした。

2023-12-09T15:49:47.487199+00:00 app[web.1]: [c7817d22-5c8b-4707-8289-00251dd76cbc] ActiveStorage::IntegrityError (Invalid cloud_name yoriyoi):

その後APIキーなども確認したのですが特に原因がわからず... Image from Gyazo

Image from Gyazo

関係のありそうなコードは以下の通りです わからなすぎて関係ないところにまでAPIの記述してると思います...。

# user.rb
require 'open-uri'
class User < ApplicationRecord
    has_one :character, dependent: :destroy

     # ユーザー作成後に呼び出されるコールバック
  after_create :assign_default_character

  private

  # デフォルトキャラクターの属性を持つキャラクターを作成
  def assign_default_character
    # Cloudinaryにアップロード済みのデフォルト画像のURL
    default_image_url = "https://res.cloudinary.com/dkxx3dybs/image/upload/v1702127528/cat_notification_kwprga.png"
    self.create_character(
      name: 'ねこちゃん',
      personality: '友達思いのやさしい',
      communication_style: 'フレンドリー',
      relationship: '相棒',
      additional: 'いつもそばにいる'
    )

    if self.character.present?
      # Cloudinaryの画像URLからアタッチ
      self.character.image.attach(io: URI.parse(default_image_url).open, filename: 'cat_notification.png')

      # Character インスタンスを保存
      self.character.save!
    end
  end
end
# config/environments/production.rb
Rails.application.configure do
  config.active_storage.service = :cloudinary
end
# config/initializers/cloudinary.rb

Cloudinary.config do |config|
  config.cloud_name = ENV['CLOUDINARY_CLOUD_NAME']
  config.api_key = ENV['CLOUDINARY_API_KEY']
  config.api_secret = ENV['CLOUDINARY_API_SECRET']
  config.secure = true
  config.cdn_subdomain = true
end
# config/cloudinary.yml

development:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV["CLOUDINARY_API_KEY"] %>
  api_secret: <%= ENV["CLOUDINARY_API_SECRET"] %>
  enhance_image_tag: true
  static_image_support: false
production:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV["CLOUDINARY_API_KEY"] %>
  api_secret: <%= ENV["CLOUDINARY_API_SECRET"] %>
  enhance_image_tag: true
  static_image_support: true
test:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV["CLOUDINARY_API_KEY"] %>
  api_secret: <%= ENV["CLOUDINARY_API_SECRET"] %>
  enhance_image_tag: true
  static_image_support: false
# config/storage.yml
test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

cloudinary:
  service: Cloudinary
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key:    <%= ENV['CLOUDINARY_API_KEY'] %>
  api_secret: <%= ENV['CLOUDINARY_API_SECRET'] %>

以上、ご助言いただければ幸いです。

fukasawamoe commented 9 months ago

CLOUDINARY_CLOUD_NAMEはcloudinaryのサイトの別のところに書いてありました....herokuのキーの修正を行ったところ直りました