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

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

ただいまの
回答率

90.53%

  • Ruby on Rails

    8636questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • AWS(Amazon Web Services)

    2479questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Heroku

    1164questions

    HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

【助けてください】herokuとS3とcarrierwaveのアップロードが一部のモデルだけでurlを正しく返しません。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 968

qwer

score 1

前提・実現したいこと

現在、localで作ったアプリをデプロイしようと、herokuを使いました。
その際、画像保存として使ったs3とcarrierwaveの連携させました。
dev環境や他のモデルだと問題ないのですが、あるモデルだけ、本番環境では
きちんとurlを返してくれません。

発生している問題・エラーメッセージ

s3には無事保存できていることが確認できています。しかし、
例えば、3f984e6d-50c9-4478-9c17-93c1ae3394c3.pngという名前の画像でも
ブラウザ上では 
/image/4/3" alt="3"
という風に頭の数字しか読み込もうとしてくれません。

developmentでのデータ型はstringなのですが、
productionのpgのDBではデータ型がintegerになっているのでしょうか?

( schema.rbでは t.string "image" となっています )

該当のソースコード

<問題のモデル>
class Article < ActiveRecord::Base

    belongs_to :user
    belongs_to :admin
    has_many :comments
      has_many :joins, dependent: :destroy
      has_many :joining_users, through: :joins, source: :user
    has_many :article_photos
    accepts_nested_attributes_for :article_photos, allow_destroy: true

    mount_uploader :image, PhotoUploader

      is_impressionable 

    before_save do
      self.wanted_skill.gsub!(/[\[\]\"]/, "") if attribute_present?("wanted_skill",)
      self.wanted_jobkind.gsub!(/[\[\]\"]/, "") if attribute_present?("wanted_jobkind")
    end
 end



<uploader>
# encoding: utf-8

class PhotoUploader < CarrierWave::Uploader::Base

    # Include RMagick or MiniMagick support:
    include CarrierWave::RMagick
    # include CarrierWave::MiniMagick

    # 画像の上限を700pxにする
    process :resize_to_limit => [700, 700]

    # 保存形式をJPGにする
    process :convert => 'jpg'

    # サムネイルを生成する設定
    version :thumb do
    process :resize_to_fit => [150, 150]
    end

    # jpg,jpeg,gif,pngしか受け付けない
    def extension_white_list
        %w(jpg jpeg gif png)
    end

    def filename
      "#{secure_token}.png" if original_filename.present?
    end

    def default_url
        'no_photo.png'
    end

    protected
    def secure_token
      var = :"@#{mounted_as}_secure_token"
      model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
    end


    # Choose what kind of storage to use for this uploader:
     storage :fog

    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
    if Rails.env.development?
      def store_dir
        "uploads/dev/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
      end
    end

    if Rails.env.production?
      def store_dir
        "uploads/pro/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
      end
    end

end


<carrierwave.rb>
CarrierWave.configure do |config|
  config.fog_credentials = {
      :provider               => 'AWS',
      :aws_access_key_id      => 'aws_access_key_id ',
      :aws_secret_access_key  => 'aws_secret_access_key',
      :region                 => 'ap-northeast-1', # Tokyo
      :path_style             => true
  }

    config.fog_public     = true # public-read
    config.fog_attributes = {'Cache-Control' => 'public, max-age=86400'}

    config.cache_storage = :fog #キャッシュの場所をS3に変更

    # テストとかで同じとこにUPLOADされたくないのでバケットを分けます
    config.fog_directory = 'musubino-s3' if Rails.env.production?
      config.fog_directory = 'musubino-s3' if Rails.env.development?

      CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
end


<view>

      <!-- 問題の部分 -->
      <div class="top-img-wrapper">
        <%= image_tag @article.image.url %>
     </div>

試したこと

別のuploaderを使いましたがうまくいきませんでした。

お願い

railsを始めたばかりで、初めてのデプロイです。
お力を貸してもらえれば幸いです!!

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

再度 stringで定義したカラムを追加してそれに保存すると解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Ruby on Rails

    8636questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • AWS(Amazon Web Services)

    2479questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Heroku

    1164questions

    HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。