LIFE

ECサイト完成!(rails)【いせ日記】









今日は昨日の続きの今月の売上を詳細を表示できるようにしていきます🙋‍♂️

・月初と月末のパラメーターを取得
・取得した値をDate型に直す

この二つをうまくできれば、無事ECサイトの完成です!!

それではやっていきましょう。

パラメーターの取得

まずは/adminsindex.html.erbの今月の売上の詳細ボタンを変更していきます。

日付操作に関しましては、下記のページを参考にさせていただきました。

https://qiita.com/mmmm/items/efda48f1ac0267c95c29

<a><%=link_to '詳細', admins_sales_record_path, class: "btn btn-success"%></a>
⬇️
<a><%=link_to '詳細', admins_sales_record_path(start_at: Time.current.beginning_of_month, end_at: Time.current.end_of_month), class: "btn btn-success"%></a>

日付がこれで取得できたはずなので、controllerを変更していきます。

パラメーターから渡される値は文字列なので、日付に変更する必要がありますね。

さて、どうやって日付型にした方がいいのか、ググってみます。

見つけました。https://techacademy.jp/magazine/19845

下のようにすれば日付型に変更できるそうです。

Date.parse("日付")

それでは、start_atend_atを日付型に変更して、検索してみます。

class Admins::SalesRecordsController < Admins::ApplicationController
    
    def show
        @purchase_record_products = current_admin.products.purchase_record_products
        start_at = Date.parse(params[:start_at])
        end_at = Date.parse(params[:end_at])
        @purchase_record_products = @purchase_record_products.where(created_at: start_at..end_at)
    end
end

こんな感じになりますね。しかし、これだと過去全ての売上の場合も実行されてしまい、エラーが起きてしまいますので、if文を追加してあげます。

class Admins::SalesRecordsController < Admins::ApplicationController
    def show
      @purchase_record_products = current_admin.purchase_record_products
      if params[:start_at] && params[:end_at]
          start_at = Date.parse(params[:start_at])
          end_at = Date.parse(params[:end_at])
          @purchase_record_products = @purchase_record_products.where(created_at: start_at..end_at)
      end
    end
end

こんな感じで完成ですね。確認してみましょう。

無事表示されました。

これでECサイトの完成です!

そして、Herokuでアプリ化したいと思います。

$ heroku login -i
Enter your Heroku credentials.
Email: Herokuに登録したメールアドレスを入力
Password: Herokuに登録したパスワードを入力
$ heroku create my-ecsite
$ heroku apps
my-ecsite

ちゃんとアプリが入りました。

Herokuアプリを作成したら、 git にリモートリポジトリとして heroku が作成されているか確認します。

$ git remote -v
heroku  https://git.heroku.com/my-ecsite.git (fetch)
heroku  https://git.heroku.com/my-ecsite.git (push)

作成されていますね。

デプロイをする前にいくつかの設定をしていきます。

group :production do
  gem 'pg', '>= 0.18', '< 2.0'
end
bundle install --without production
それではデプロイしてみます!
$ git push heroku master
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed
remote: !
remote:  ! ## Warning - The same version of this code has already been built: 93a6c27708271ca534f254c00f6f019d6a39e97f
remote:  !
remote:  ! We have detected that you have triggered a build from source code with version 93a6c27708271ca534f254c00f6f019d6a39e97f
remote:  ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.
remote:  !
remote:  ! If you are developing on a branch and deploying via git you must run:
remote:  !
remote:  !     git push heroku <branchname>:main
remote:  !
remote:  ! This article goes into details on the behavior:
remote:  !   https://devcenter.heroku.com/articles/duplicate-build-version
remote: 
remote: Verifying deploy...
remote: 
remote: !       Push rejected to my-ecsite.
remote: 
To https://git.heroku.com/my-ecsite.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/my-ecsite.git'

エラーとの闘い

上記のエラーが出てしまい、悪戦苦闘してました。。

このあと、一度アプリを削除したりなんかして みたのですがうまくいかず、いろいろ調べて奮闘したら7時間もエラーと戦ってました。。

いろいろ試行錯誤して解決していったのですが、最終的に下記のエラーに行き着きました。

Missing encryption key to decrypt file with. Ask your team for your master key and write it to /tmp/build_2e508c58/config/master.
key or put it in the ENV['RAILS_MASTER_KEY'].

こちらを参考にさせていただきました。
ファイルを復号化するための暗号化キーがありません。とのことらしく、以下のコードを入力したら解決しました!

$heroku config:set RAILS_MASTER_KEY=`rake secret`




$git push heroku master:mainでデプロイすることはできたのですが、上記のようにエラーが起こり、アプリがひらけない状況です。。

$git logでエラーを探しているとActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "products" does not exist

という文章が出てきました。

ちゃんとエラーもなく全て動いているのですが、herokuの方ではエラーが出てしまっているようです。

つまり、herokuの方だけエラーが起きているので、herokuでのマイグレーションが出来ていないかなと思い(謎の思考)、いろいろググってみました。すると、下記のようなコマンドがあるみたいです。

$heroku run rails db:migrate

これで無事解決が出来ました😭

$ heroku plugins:install heroku-config
$ heroku config:push
$ heroku config
$ heroku config:set ENV_VAR_NAME="value"

heroku-configというプラグインを使用して、Herokuに直接.envを渡さないと決済機能が使えないので、上記を実行しました。

これでやっと完成です!

まとめ【いせ日記】

やっとECサイトが完成致しました!

今日はherokuのエラーに丸一日費やしました。エンジニアになるとこういうことが日常茶飯事なのでしょうか。

Adminアカウントの作成と売上詳細機能の追加の部分は後日まとめたものをアップしようと思っています!

いやーほんとエラーで全く進められず、今日のブログあげられないんじゃないかと思いました笑

それでは明日は違うポートフォリオの作業にうつりたいと思います!

何にするかはまだ決めてません😅

最後まで読んでいただきありがとうございます!

それではまた明日。

-LIFE

Copyright © Iseblog ,@2020 All Rights Reserved.