初めてみたエラーだったので対処法を一つ
Sass::SyntaxError

原因
.graph-container {@extend .container-fluid;}
解決方法
!optionalを追加する。
.graph-container {
@extend .container-fluid !optional;
}

.graph-container {@extend .container-fluid;}
!optionalを追加する。
.graph-container {
@extend .container-fluid !optional;
}
mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin -p

RDSのダッシュボードのデータベースを選択して、データベースが動作しているか(停止中でないか)確認します。

EC2ダッシュボードの「セキュリティーグループ」を選択して、「インバウンドルールを編集」をクリックします。



mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin p

ERROR 1045 (28000): Access denied for user ‘admin’@’10.10.0.10’ (using password: NO)
とエラーが出てしまいました・・・
これは-u admin -pの部分が-u admin pになっていたためでした。
正しいコマンドをします。(****の部分は環境で変わる部分です)
mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin -p

MySQLに接続できました!
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
:
(省略)
:
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
# 追加
gem 'rspec-rails', '~> 3.8'
gem 'factory_bot_rails', '~> 5.0'
end
group :development do
:
(省略)
:
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
Gemをインストールします。
bundle install
RSpecがインストールされているか確認します。
bundle exec rspec --version
上記のコマンドを実行するとターミナルに以下のような実行結果が表示されます。
bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.2 - rspec-expectations 3.8.4 - rspec-mocks 3.8.1 - rspec-rails 3.8.2 - rspec-support 3.8.2
FactoryBotがインストールされているか確認します。
bundle exec gem list | grep factory_bot_rails
上記のコマンドを実行するとターミナルに以下のような実行結果が表示されます。
bundle exec gem list | grep factory_bot_rails factory_bot_rails (5.0.2)
サンプルアプリのプロジェクトにRSpecを導入します。
rails generate rspec:install
上記のコマンドを実行すると以下のファイルが生成されます。
アプリ名 └── spec ├── rails_helper.rb └── spec_helper.rb
テスト用のDBを最新の構成にします。
rails db:migrate:reset RAILS_ENV=test
テスト用のDBとは自動テストを実行するときに利用する専用のDBです。
例えば自動テストで「全データが消えること」を確認するとき、
開発中に利用しているデータが消えてしまっては困ります。
開発中のデータと自動テスト用のデータを分離して考えることで、双方が干渉しないようになります。
docker-compose run web bundle exec rails g model hiit user:references training_day:date training_time:integer

docker-compose exec web bundle exec rake db:migrate


docker-compose exec web rails g controller hiits new edit show index


<section class="hiit-form">
<div class="log-form">
<div class="form-title tween-animate-title center-position">運動記録</div>
<%= form_with model: @hiit, local: true do |f| %>
<%= f.date_field :training_day, id: "date-form", type: "text", readonly: "",
placeholder: 'クリックして運動した日をカレンダーで選択', class: "form-field btn" %>
<% if @hiit.errors.include?(:training_day) %>
<div class="alert alert-danger ">
<%= @hiit.errors.messages[:training_day][0] %>
</div>
<% end %>
<%= f.number_field :training_time, required: true, placeholder: '運動時間を分単位で選択' %>
<% if @hiit.errors.include?(:training_time) %>
<div class="alert alert-danger ">
<%= @hiit.errors.messages[:training_time][0] %>
<% end %>
<%= f.label '運動メモ', class: "box center-position" %>
<%= f.text_area :content, class: "form-area center-position", placeholder: '例: スクワットを〇〇分、腹筋を〇〇分、プランクを〇〇分など' %>
</div>
<%= f.submit yield(:button_text), class: "btn slide-wine center-position" %>
<% end %>
</section>
<%= render 'shared/datetime' %>
<script>
const today = new Date(new Date().setHours(0, 0, 0, 0))
const a_month_ago = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate())
// ● カレンダー
// 選択できない日付データ(自由に変更できます。)
const disable_dates = ['']
// カレンダーの日本語化
flatpickr.localize(flatpickr.l10ns.ja);
// カレンダーの表示
flatpickr('#date-form', {
// スマートフォンでもカレンダーに「flatpickr」を使用
disableMobile: true,
// 1ヶ月前から本日まで選択可
minDate: a_month_ago,
// 選択できない日付
disable: disable_dates
});
</script>
なおflatpicker(カレンダー機能)を使わないときは無視していいです。できればjsに置き換えたほうが良いです
Gemfileに記述します。↓
Gemfile gem 'rails', '~> 5.1.7' gem 'puma', '~> 3.7' gem 'sass-rails', '~> 5.0' gem 'bootstrap-sass', '3.3.7' gem 'font-awesome-sass' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.2' gem 'turbolinks', '~> 5' gem 'bcrypt', '~> 3.1.7' gem 'kaminari' gem 'rails-i18n', '~> 5.1' gem 'jbuilder', '~> 2.5' gem 'chart-js-rails', '~> 0.1.4' ←追加
コンテナを作ります
docker-compose build
コンテナを起動します
docker-compose up -d
コントローラを作成(名前は任意でOKです。ここではsmall_stepsとしている)
docker-compose exec web rails g controller small_steps index
package.jsonに以下を記述します
{ "name": "chart_js_sample", "private": true, "dependencies": { "chart.js": "^2.7.1" ←追加 } }
Railsアプリがライブラリを読み込めるように以下を記述します。
//= require rails-ujs
//= require turbolinks
//= require jquery3
//= require jquery_ujs
//= require jquery
//= require Chart.min ←追加
//= require bootstrap
//= require_tree .
ビューに以下を記述します。
small_steps/index.html.erb
<h1 class="text-center">スモールステップとビッグエリア</h1> <canvas id="myChart" width="200" height="200"></canvas> <script>draw_graph();</script>
Javascript部分はCoffeeScriptに変換します。
window.draw_graph = ->
ctx = document.getElementById("myChart").getContext('2d')
myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
})
http://localhost:3000/small_steps/indexにアクセスすると↓

グラフが描画された!
Docker環境でのコントローラを作成するコマンド
tasksの部分は自分が作りたいコントローラー名にする
createとdestroyアクションを作成するという意味
docker-compose exec web rails g controller tasks create destroy --skip-template-engine
–skip-template-engine: ビューファイルをスキップする設定
docker-compose exec web rails g controller tasks create destroy --skip-template-engine
コントローラーを削除したいとき
docker-compose exec web rails destroy controller macs
controllerの記述
def show
@user = current_user
@hiits = @user.hiits
@graphdays = @hiits.order(:training_day).limit(1000)
@dayline = Array.new
@graphdays.each do |graphday|
@dayline.push(graphday.training_day.strftime('%Y/%m/%d').to_s)
end
@graphtimes = @hiits.order(:training_day).limit(1000)
@minuteline = Array.new
@graphtimes.each do |graphtime|
@minuteline.push(graphtime.training_time)
end
end
<div class="chart-container" style="position: relative; width: 100%; height: 400px;">
<canvas id="My_Chart"></canvas>
</div>
<script>
var graphdays = <%= @dayline %>, graphminutes =
<%= @minuteline %>
</script>
<script>draw_graph();</script>
グラフが表示されない・・・

検証してみてみると
var graphdays = ["2021/03/11", "2021/03/30", "2021/04/07", "2021/04/09", "2021/04/10", "2021/04/16", "2021/04/16"], graphminutes = [22, 15, 20, 10, 10, 6, 10]
“が"に変換されている!
原因はRails3から<%= ~ %>を使って出力を行う場合に自動的にエスケープ処理が行われるようになったため。
<script> var graphdays = <%= raw @dayline %>, graphminutes = <%= @minuteline %> </script> <script>draw_graph();</script>
または
<script> var graphdays = <%== @dayline %>, graphminutes = <%= @minuteline %> </script> <script>draw_graph();</script>
とするとエスケープされないように出力できる
var graphdays = ["2021/03/11", "2021/03/30", "2021/04/07", "2021/04/09", "2021/04/10", "2021/04/16", "2021/04/16"], graphminutes = [22, 15, 20, 10, 10, 6, 10]

グラフが描画された!
@dayline.html_safeで試した場合はエラーとなった。
rawと<%==%>は<%==%>のほうがパフォーマンス上のメリットが少々あるそうなので後者を選ぶことにした。

WARNING: UNPROTECTED PRIVATE KEY FILE!と怒られた
sudo chmod 600 ~/Desktop/〇〇.pem
↑秘密鍵の場所(各自置いているところで異なります)

※秘密鍵の場所と秘密鍵の名前は各自で異なりますのでご注意を
自分は秘密鍵をデスクトップに仮置していたのでDesktopとなっています。
heroku run console
で調べたところ次のようなエラーが出ました。
config.autoloader = :classic
config/application.rbに追加する
〜〜
〜〜
#moduleから上は省略
module Api
classApplication < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults6.1
# Configuration for the application, engines, and railties goes here.
# These settings can be overridden in specific environments using the files
# in config/environments, which are processed later.
# config.time_zone = "Central Time (US & Canada)"
# config.eager_load_paths << Rails.root.join("extras")
# これを追加↓
config.autoloader = :classic
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = true
end
end
追加して保存後に
bundle exec pumactl start
↑をコマンドしたところpumaを起動することができました。
ログイン、ログアウト機能(自前で)
https://railstutorial.jp/chapters/basic_login?version=5.1#cha-basic_login
ログイン、ログアウト機能(外部ライブラリ- devise)
https://qiita.com/cigalecigales/items/f4274088f20832252374
ログインしてブラウザを閉じてもログイン状態を維持したい! – Remember me機能
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-remember_me
新規登録をしたらメールアドレスが送られるやつ
https://railstutorial.jp/chapters/account_activation?version=5.1#cha-account_activation
パスワードを忘れた時に再設定できるやつ
https://railstutorial.jp/chapters/password_reset?version=5.1#cha-password_reset