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

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

ただいまの
回答率

90.33%

  • Ruby on Rails

    7717questions

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

  • AWS(Amazon Web Services)

    2173questions

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

  • PostgreSQL

    1150questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • Heroku

    950questions

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

S3 heroku で画像をアップロードできません

受付中

回答 1

投稿 編集

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

akito0121

score 2

 前提・実現したいこと

開発環境    :Ruby on Rails 5.2.0
本番環境DB:PostgreSQL 
サーバー    :Heroku
画像保存先  : aws S3

railsで、投稿アプリを作成しているのですが、どうしても画像の投稿ができません。
(画像以外の投稿はできる)
*ruby初心者のため、的外れなこと言ってたらすんません。

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

2018-06-26T22:18:47.505109+00:00 app[web.1]: I, [2018-06-26T22:18:47.505027 #4]  INFO -- : [d43934a4-9f61-454a-9279-6647d872ab74] Completed 500 Internal Server Error in 5ms (ActiveRecord: 2.0ms)
2018-06-26T22:18:47.505983+00:00 app[web.1]: F, [2018-06-26T22:18:47.505895 #4] FATAL -- : [d43934a4-9f61-454a-9279-6647d872ab74]
2018-06-26T22:18:47.506075+00:00 app[web.1]: F, [2018-06-26T22:18:47.505985 #4] FATAL -- : [d43934a4-9f61-454a-9279-6647d872ab74] ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "active_storage_blobs" does not exist
2018-06-26T22:18:47.506079+00:00 app[web.1]: LINE 8:                WHERE a.attrelid = '"active_storage_blobs"'::...
2018-06-26T22:18:47.506083+00:00 app[web.1]: ^
2018-06-26T22:18:47.506085+00:00 app[web.1]: :               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
2018-06-26T22:18:47.506086+00:00 app[web.1]: pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
2018-06-26T22:18:47.506088+00:00 app[web.1]: c.collname, col_description(a.attrelid, a.attnum) AS comment
2018-06-26T22:18:47.506090+00:00 app[web.1]: FROM pg_attribute a
2018-06-26T22:18:47.506092+00:00 app[web.1]: LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
2018-06-26T22:18:47.506095+00:00 app[web.1]: LEFT JOIN pg_type t ON a.atttypid = t.oid
2018-06-26T22:18:47.506100+00:00 app[web.1]: LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
2018-06-26T22:18:47.506102+00:00 app[web.1]: WHERE a.attrelid = '"active_storage_blobs"'::regclass
2018-06-26T22:18:47.506104+00:00 app[web.1]: AND a.attnum > 0 AND NOT a.attisdropped
2018-06-26T22:18:47.506106+00:00 app[web.1]: ORDER BY a.attnum
2018-06-26T22:18:47.506109+00:00 app[web.1]: ):
$ heroku rake db:migrate
Running rake db:migrate on ⬢ ilohasu... up, run.7827 (Free)
D, [2018-06-26T22:15:30.352252 #4] DEBUG -- :    (1.4ms)  SELECT pg_try_advisory_lock(6325006434566265)
D, [2018-06-26T22:15:30.370865 #4] DEBUG -- :    (2.0ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2018-06-26T22:15:30.389723 #4] DEBUG -- :   ActiveRecord::InternalMetadata Load (1.3ms)  SELECT  "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2  [["key", "environment"], ["LIMIT", 1]]
D, [2018-06-26T22:15:30.402293 #4] DEBUG -- :    (1.1ms)  BEGIN
D, [2018-06-26T22:15:30.406253 #4] DEBUG -- :    (1.2ms)  COMMIT
D, [2018-06-26T22:15:30.407703 #4] DEBUG -- :    (1.1ms)  SELECT pg_advisory_unlock(6325006434566265)


下記サイトを参考に進めました
https://qiita.com/hmmrjn/items/479c9e9ce82771f1b6d7
https://www.sejuku.net/blog/8178

 該当のソースコード

storage.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

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

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: ap-northeast-1
  bucket: imuploadtest


database.yml

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5


user.rb

class User < ApplicationRecord
    has_one_attached :image
end


_form.html.erb

<%= form_for(@user) do |form| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

  <div class="field">
    <%= form.label :image %>
    <%= form.file_field :image %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>


show.html.erb

<p id="notice"><%= notice %></p>

<p>
  <strong>Name:</strong>
  <%= @user.name %>
</p>

<p>
  <strong>Image:</strong>
  <%= image_tag @user.image %>
</p>

<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>


users_controller.erb

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = User.new
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)
    # x = Cloudinary::Uploader.upload(params[:user][:image])
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1
  # PATCH/PUT /users/1.json
  def update
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { render :show, status: :ok, location: @user }
      else
        format.html { render :edit }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :image)
    end
end

 試したこと

同じようなエラーがあったのですが、自分は解決できずです。
https://teratail.com/questions/77287
https://qiita.com/lotasty66/items/460899c0fd41a7c09304

長々とすみませんが、回答お願いします。
他にも解決のため必要な情報があれば、教えてください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

# production.rb

# config.assets.compile = false
config.assets.compile = true


に書き換えてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/27 16:50

    buta_bottiさん回答ありがとうございます。
    がやはり、できません。
    config.assets.compile = true にして、再度
    $ heroku rake db:migrate RAILS_ENV=production
    →PG::DuplicateTable: ERROR: relation "users" already exists
    https://qiita.com/motty93/items/455515ede653371a5887
    $ heroku pg:reset DATABASE_URL
    →Resetting postgresql-pointy-56726... done
    $ heroku run rake db:migrate
    →エラーなし

    これでいけるかと思いましたが、やはり同じエラー
    ActiveRecord::StatementInvalidが出てきます。。

    キャンセル

  • 2018/06/27 17:06

    ファイルを変更した後に
    $ git push
    $ git push heroku master
    しましたか?

    キャンセル

  • 2018/06/27 17:14

    もちろんです !

    キャンセル

  • 2018/06/27 17:42

    うーん、また何かわかったらコメントします...

    キャンセル

  • 2018/06/27 17:56

    一応確認なんですけどactive_storage_blobsテーブルはちゃんと存在してますか?

    キャンセル

  • 2018/06/27 18:57

    vender/bundle/ruby/2.5.0/
    以下にあります。もしかして、これですかね?

    キャンセル

  • 2018/06/28 09:13

    エラーの内容としてはactive_storage_blobsテーブルが存在していませんよっていうエラーですので...

    キャンセル

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

  • Ruby on Rails

    7717questions

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

  • AWS(Amazon Web Services)

    2173questions

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

  • PostgreSQL

    1150questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • Heroku

    950questions

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