20210728のRailsに関する記事は12件です。

コメント件数を表示させる

はじめに 投稿に対してコメントがあった場合、件数が表示されるようにしました。 すごく簡単ですがアウトプットしていきます。 countメソッド <%= review.comments.count%> 結論上記の記述で表示させました。 この時countメソッドを使用しました。 model.count このような記述でモデルのテーブルのレコード数を取得することができます。 今回はreviewに該当するcommentsのレコード数を取得することになりました。 DBの中にreview_id:16という投稿に対し,content(comments)が2件保存されています。 なので2件コメントがあるということで最初のスクショには2と表示されています。 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS(ECS)上でデータベースが作成されない!? Dockerで環境構築したRails6をRDSと連携できない問題を解決!

開発環境をDockerで開発していたRails6アプリケーションをAWS(ECS)にデプロイしている実装で、AWS上にデータベースが作成できない問題が発生したので解決までの手順を残しておこうと思います。 開発環境 RubyMine Ruby 3.0.1 Ruby on Rails 6.1.3 Docker 20.10.7 AWS (ECS fargate/ECR/VPC/RDS/ACM/ALB/S3/Route53) 発生していた問題 オリジナルアプリをDockerで開発していたので、デプロイ先をAWS(ECS fargate)にしたいと思い実装を進めているなかで、本番環境でデータベースが作成されないエラーが起きました。 エラー内容(ECSタスク上のログ) 2021-07-26 19:26:48Tasks: TOP => db:create 2021-07-26 19:26:48(See full trace by running task with --trace) 2021-07-26 19:26:48rails aborted! 2021-07-26 19:26:48ActiveRecord::ConnectionNotEstablished: Unknown MySQL server host 'db' (-2) 2021-07-26 19:26:48Caused by: 2021-07-26 19:26:48Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2) 2021-07-26 19:26:48Unknown MySQL server host 'db' (-2) 2021-07-26 19:26:48Couldn't create 'locat' database. Please check your configuration. エラー文を調べたところ、サーバーホスト名dbが本番環境で見つからないというエラー内容だとわかりました。 修正前のdatabase.yml # MySQL. Versions 5.5.8 and up are supported. # # Install the MySQL driver # gem install mysql2 # # Ensure the MySQL gem is defined in your Gemfile # gem 'mysql2' # # And be sure to use new-style password hashing: # https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html # default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password socket: /tmp/mysql.sock host: db development: <<: *default database: locat_development # 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: locat_test production: <<: *default database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket] %> # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password or a full connection URL as an environment # variable when you boot the app. For example: # # DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" # # If the connection URL is provided in the special DATABASE_URL environment # variable, Rails will automatically merge its configuration values on top of # the values provided in this file. Alternatively, you can specify a connection # URL environment variable explicitly: # # production: # url: <%= ENV['MY_APP_DATABASE_URL'] %> # # Read https://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full overview on how database connection configuration can be specified. # エラー原因 エラー原因は、ローカルのmysqlサーバーホスト名'db'でECS上で設定しているRDSとの連携をしようとしていたことが原因でした。 つまり、ローカルの接続先ホストをRDSのエンドポイントにして連携させてあげる必要がある。 ローカルのホスト名と本番環境のRDSを同じにしてあげないと、RDS上にはない'db'で接続しようとしてしまいデータベースが作成できないエラーが発生してしまうということでした。 解決方法 ローカルの接続先ホストをRDSのエンドポイントに指定してあげることでデータベースの作成ができました。 修正方法 % EDITOR=vim bin/rails credentials:edit でhostを作成してRDSのエンドポイントを指定する #aws: # access_key_id: AKIAU2S6QQYAB4JOXSO6 # secret_access_key: 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 # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx db: database: RDSのデータベース名 username: RDSのユーザー名 password: RDSのパスワード socket: xxxxxxxxxxxxxxxxxxxxxxxxx host: ここにRDSのエンドポイントを指定してあげる credential.ymlにエンドポイントを指定すると、ECSで作成するコンテナの環境変数にエンドポイントを設定する必要はなくなる(設定しても可) credential.ymlに必要なエンドポイントを指定したあとは、database.ymlを下記のように編集する database.yml production: <<: *default database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket] %> host: <%= Rails.application.credentials.db[:host] %> host: <%= Rails.application.credentials.db[:host] %>を設定する ここまで修正したらECRに設定したリポジトリのlatestを削除後にプッシュを行う。 (Rails側のDockerfileをプッシュ) CircleCIを導入している方は自動デプロイで可能。 タスク定義のリビジョンでコンテナの再定義を行う。再定義後にクラスターのサービス名の設定内のリビジョンを変更した最新のlatestに変更。 ここまで修正したらタスクのログでデータベースが作成できているか確認をしてみる。(おそらくデータベースの作成ができているでしょう。) まとめ 初めてECSに触れたので、デプロイまでの実装でかなりつまずきました。ひとまずデータベースの作成ができたので一安心。 インフラ周りが自分の中で最も難しい分野だと感じているので、知識を増やして正しく構築できるように勉強していこうと思います!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Ruby]renderメソッド記述時のインスタンス変数の動き

はじめに 本記事では、renderメソッド記述時のインスタンス変数の動きをまとめました。 初学者の方々はとても重要な部分になります。 ぜひ覚えましょう。 renderメソッドとは 部分テンプレートを呼び出す際に利用するメソッドです。 呼び出す部分テンプレートは、partialというオプションで指定します。 partialオプション 部分テンプレート名を指定することで、該当する部分テンプレートを表示できます。 (例)_form.html.erbという部分テンプレート呼出 <% render partial: "form" %> localsオプション 部分テンプレート内でその変数を使えるようになります。 local『s』です!! localではありません。 sを忘れてはなりません!! <% render partial: "sample", locals: { post: "Sunplaza_Nakano" } %> 上の記述では、 部分テンプレート内において「Sunplaza_Nakano」という 文字列の代入されたpostという変数が使えるようになります。 本題です インスタンス変数がいろんなところで受け渡しされます。 (例) 今回は、newアクションを焦点にしていきます。 コントローラーでインスタンス変数「@prototype」を生成し、ビューへ渡します。 class PrototypesController < ApplicationController def index @prototypes = Prototype.all end def new @prototype = Prototype.new end ・ ・ ・ 省略 ・ ・ ・ end ビューが「@prototype」を貰います。 その後、部分テンプレートを生成する機会があったとし、renderメソッドを使用します。 そこで、部分テンプレート用にlocalsの部分で、 「@prototypes」をさらに「prototype」という変数にします。 その後、前述で説明した「partialオプション」にて"form"の指定があるので、 _form.html.erbへ「prototype」を渡します。 <div class="main"> <div class="inner"> <div class="form__wrapper"> <h2 class="page-heading">新規プロトタイプ投稿</h2> <%# 部分テンプレートでフォームを表示する %> <%= render partial: "form", locals: { prototype: @prototype } %> </div> </div> </div> _form.html.erbにて「prototype」を貰います。 formメソッドに着目すると、 「model:prototype」 と記述されています。 <%= form_with model: prototype, local: true do |f|%> <div class="field"> <%= f.label :title, "タイトル" %><br /> <%= f.text_field :title, id:"prototype_title" %> </div> ・ ・ ・ 省略 ・ ・ ・ <% end %> このように変数たちは移動しています。 この移動は、アクションごとに追う必要があります。 注意しましょう。 終わりに 現在、学習中のカリキュラムをほぼ終え、 自分の手で、コードを記述しているフェーズになっています。 その際に、理解しているようで理解していなかった部分を今回記事にしました。 引き続き、頑張りましょう!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コロナで不健康になった人の為に、健康に特化したレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

独学・未経験者がレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ポートフォリオ】独学・未経験者がレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2にRailsアプリをデプロイ⑥ ~Webサーバーの設定~

はじめに この記事は前回の続きです。 クライアントからのリクエストをまずはEC2内のWebサーバーに送られ、Webサーバーで処理ができるものはそのままブラウザにレスポンスを返します。 もしWebサーバーでは処理できないものであれば、アプリケーションサーバーへふって処理します。 そのWebサーバーを今回導入してデプロイ完了とします。 Nginxを導入 今回はNginxというWebサーバーの一種を導入します。 ターミナルで下記のコマンドを実行してインストールします。 ターミナル [ec2-user@ip-172-31-25-189 ~]$ sudo amazon-linux-extras install nginx1 Is this ok [y/d/N]:と表示されたらyを押してエンター押してください。 Nginxの設定を編集 Nginxの設定ファイルはターミナルからコマンドを実行してファイルを開きます。 ターミナルでファイルを開けたら下記のように編集します。 しかし、3行目、17行目の「リポジトリ名」と書かれた部分と 11行目の「Elastic IP」と書かれた部分は自分のものに置き換えます。 /etc/nginx/conf.d/rails.conf upstream app_server { # Unicornと連携させるための設定 server unix:/var/www/リポジトリ名/tmp/sockets/unicorn.sock; } # {}で囲った部分をブロックと呼ぶ。サーバの設定ができる server { # このプログラムが接続を受け付けるポート番号 listen 80; # 接続を受け付けるリクエストURL ここに書いていないURLではアクセスできない server_name Elastic IP; # クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなので大きめにしておく client_max_body_size 2g; # 接続が来た際のrootディレクトリ root /var/www/リポジトリ名/public; # assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定 location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } error_page 500 502 503 504 /500.html; } 入力を終えたら「escキー」→「:wq」の順で実行し、保存します。 Nginxの権限を変更する POSTメソッドでもエラーが出ないように下記のコマンドでNginxの権限を変更します。 ターミナル [ec2-user@ip-172-31-25-189 ~]$ cd /var/lib [ec2-user@ip-172-31-25-189 lib]$ sudo chmod -R 775 nginx これでNginxの設定は完了です。 Nginxの設定ファイルを再度読み込みさせます。↓ [ec2-user@ip-172-31-25-189 lib]$ cd ~ [ec2-user@ip-172-31-25-189 ~]$ sudo systemctl reload nginx [ec2-user@ip-172-31-25-189 ~]$ sudo systemctl start nginx Unicornの設定を変更する Unicornの設定を変更します。 config/unicorn.rbのファイルのこの記述があると思います。 ↓ config/unicorn.rb (省略) listen 3000 (省略) この記述を下記のように修正します。 config/unicorn.rb (省略) listen "#{app_path}/tmp/sockets/unicorn.sock" できたらコミット、プッシュ さらに本番環境にも反映させます。↓ ターミナル # 開発中のアプリケーションに移動 [ec2-user@ip-172-31-25-189 ~]$ cd /var/www/開発中のアプリケーション # GitHubの内容をEC2に反映させる [ec2-user@ip-172-31-23-189 <レポジトリ名>]$ git pull origin master Unicornを再起動させます。 ⑤の記事でkillコマンドを使って行った作業と同じです。 まずプロセスを確認↓ ターミナル [ec2-user@ip-172-31-23-189 <リポジトリ名>]$ ps aux | grep unicorn ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn そしてkill ターミナル # 上記の例だと「17877」 [ec2-user@ip-172-31-23-189 <リポジトリ名>]$ kill プロセス番号 そしてUnicornを起動↓ ターミナル [ec2-user@ip-172-31-23-189 <リポジトリ名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D これで全てが完了です。 ブラウザからElastic IPでアクセスしてデプロイされているはずです。 最後に 区切って記事にしたので六つの記事になりました。 ただ、初めてAWSを使ってこの工程は一応残しておきたかったので記事にできてよかったです。 また、自分の作成したアプリがインターネットで公開されるのは少し感動しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】アプリ 新規作成 サーバー起動 手順

新規アプリ作成〜サーバー起動までを最短で行う方法を記述してます 環境 Ruby 3.0.2 Rails 6.1.4 MySQL 5.6 ※環境を合わせると、エラー最小限で進められると思います 新規アプリ作成 MySQLを使用する場合 $rails new <アプリ名を記入> -d mysql sqlite3を使用する場合 $rails new <アプリ名を記入> データベース設定 config/database.ymlで以下を設定する database.yml default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root ←MySQLのユーザー名がrootでない場合は変更する password: "<MySQLのパスワードを記入>" socket: /tmp/mysql.sock development: <<: *default database: <アプリ名>_development データベース作成 以下のコマンドを実行 $ rails db:create 以下が表示されればOK Created database '<アプリ名>_development' Created database '<アプリ名>_test' サーバー起動 ①以下のコマンドを実行 $ rails s ②GoogleCrome等で、localhost:3000を開いて、以下の画面が表示されれば完璧 参考資料 備考 最短で起動したかったので、自分で記事を作成してみました。 不備などあれば教えていただけますと助かります
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecord::NoDatabaseError

環境 Ruby 3.0.2 Rails 6.1.4 事象 以下を実行するとエラーが表示された。 ①新規Railsアプリを作成(rails new) ②サーバーを起動(rails s) ③config/database.ymlにMySQLの接続情報を追記 ④localhost:3000を開く ActiveRecord::NoDatabaseError 解決策 以下を実行。 rails db:create 「データベースがないよ」というエラーなので、データベースを作ってあげればOK サーバーを再起動後にリロードしたら、Railsのデフォルト画面が表示されました 参考資料
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecord::ConnectionNotEstablished【MySQL】

環境 Ruby 3.0.2 Rails 6.1.4 事象 以下を実行するとエラーが表示された。 ①新規Railsアプリを作成(rails new) ②サーバーを起動(rails s) ③localhost:3000を開く。 ActiveRecord::ConnectionNotEstablished 解決策 config/database.ymlでパスワードを設定 default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: "<パスワード>" socket: /tmp/mysql.sock development: <<: *default database: <アプリ名>_development この後、ActiveRecord::NoDatabaseErrorが出ましたが、これはこちらにまとめて置きます。 参考資料
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails_admin+cancancanで管理者機能実装を5ステップで解説!

Railsで管理者機能というと、 namespaceで一般ユーザーと管理者をわけて、管理者側の機能を一から自分で実装する方法や、 rails_admin、active_admin、Administrateといった管理機能のgemを使う方法が挙げられると思います。 その中でも今回は、rails_adminというgemを使って管理者機能の実装をしていきます。 管理者機能の実装方法選択において、この記事がわかりやすかったので、まだどの方法で実装するか悩んでる方は参考にしてみてください。 rails管理画面系gem比較してみた 開発環境 ruby 2.6.3 Rails 5.2.6 前提 まず前提として、deviseを使ってユーザー認証機能が実装済みであること。 管理者権限を付与する際にユーザーに管理者の判定をするカラムをつけるか、adminなどの管理者用のテーブルを作るかの2つがありますが、今回は前者のユーザーに管理者の判定をするカラムを追加していきます。 5ステップで解説 rails_adminとcancancanを使った管理者機能実装は5ステップ! gemのインストール rails_adminの設定 adminカラム追加 cancancanの設定 管理者画面へのリンクの作成 gemのインストール まずは、rails_adminとcancancan2つのgemをインストールします。 Gemfile gem 'cancancan' gem 'rails_admin' Gemfileに追加できたらインストールします。 $ bundle rails_adminの設定 では、rails_adminのセットアップを行っていきます。 ターミナルで下記コマンド実行 $ rails g rails_admin:install Where do you want to mount rails_admin? Press <enter> for [admin]と聞かれます。 管理者画面のパスはどうする?という意味で、今回はデフォルトの/adminでOKなので、Enterを押します。 すると、管理者画面へのルーティングとrails_adminの設定ファイルが作られます。 では作られたrails_adminの設定をいじっていきます。 config/initializers/rails_admin.rbの下記設定2つのコメントアウトを外します。 config/initializers/rails_admin.rb : # == Devise == config.authenticate_with do warden.authenticate! scope: :user end config.current_user_method(&:current_user) # == CancanCan == config.authorize_with :cancancan : これでrails_adminでのdeviseとcancancanの設定は完了です。 userモデルにadminカラム追加 次に、どのユーザーが管理者なのかを判定するために、userテーブルにadminカラムを追加していきます。 adminカラムはboolean型でデフォルトの値はfalseで、trueのときに管理者として扱います。 ターミナルでadminカラムを追加。 $ rails g migration AddAdminToUser admin:boolean マイグレーションファイルが作成されるので、デフォルトをfalseにしておきます。 マイグレーションファイル class AddAdminToUser < ActiveRecord::Migration[5.2] def change # default: falseを追加 add_column :users, :admin, :boolean, default: false end end マイグレーションファイルへの追加ができたら、反映させます。 $ rails db:migrate これで、もともとあったuserテーブルにadminカラムを追加できました。 管理者権限をつけたいユーザーのadminカラムをtrueにしていきます。 $ rails c > user = User.find(1) > user.update_attribute(:admin, true) 他にもseedファイルで管理者用のデータを用意する方法もあります。 cancancanの設定 そもそもcancancanとは、ユーザーに権限を与えるものです。 管理者であれば全ての機能を使えて、ユーザーは投稿、編集しかできないのようなものです。 では、cancancanのセットアップを行っていきます。 $ rails g cancan:ability コマンドを実行すると、権限を管理するファイルが作られます。 app/models/ability.rbで、管理者の権限設定をしていきます。 10行目から14行目のif user.admin?のところを書き換えていきます。 app/models/ability.rb def initialize(user) : # ログインしているかつadminカラムがtrueの場合 if user && user.admin? # rails_adminへのアクセスを許可 can :access, :rails_admin # 全ての機能を使えるように設定 can :manage, :all end : end ログインしていて、adminカラムがtrueのユーザーは、rails_adminへのアクセス権限があり、全てのモデルのCRUDが行える状態になってます。 管理者画面へのリンクの作成 これで、管理者はrails_adminの管理画面にアクセスできて、管理機能も使える状態になっています。 localhost:3000/admin など root pathの後に/adminをつけると管理画面に遷移できます。 ただ、毎回URLにベタ打ちするのがめんどくさいので、フッターにrails_adminの管理画面へのリンクを作成しておきます。 _footer.html.erb <footer> <!--ログインしてるユーザーが管理者の場合のみ--> <% if current_user.try(:admin?) %> <%= link_to '管理者ログイン', rails_admin_path %> <% end %> </footer> これで、このリンクを踏むだけで、管理画面へ遷移できるようになりました。 まとめ rails_adminとcancancanを使った管理者機能実装は5ステップ! gemのインストール rails_adminの設定 adminカラム追加 cancancanの設定 管理者画面へのリンクの作成 今回は、管理機能をrails_adminを使って実装しました。 gemを使うことで、時間が短縮できて他の機能へ注力できるので、開発期間が限られる場合や管理機能にそこまでのカスタマイズ性を求めない場合は、抜群の威力を発揮しますので、ぜひ導入してみてください。 また今回は、rails_adminの管理画面の日本語化までは解説していないので、また後日別記事あげさせて頂きます。 rails_admin管理画面の日本語化はこちらの記事で解説しています。 rails_admin管理者画面の日本語化 最後まで見ていただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミング言語別文法早見表(基礎)

1.変数 *値を更新できる箱 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 変数名=値 let 変数名=値 var 変数名=直 $変数名=値 例 money=100 let money=100 var money=100 money=100 2.定数 *値を更新できない箱 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 変数と差異なし const 変数名=値 let 変数名=直 $変数名=値4 例 const=100 const tax=100 let tax=100 tax=100 3.四則演算子 *基本的に同じ 四則演算子 項目 + ー × ÷ 余り 書き方 + - * / % 例 price + tax apple - orange price * count price / tax price % tax インクリメント演算子(足し算) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 なし ++; なし $++; 例 なし const y = x++; なし $num++; インクリメント演算子(引き算) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 なし --; なし --; 例 なし const y = x--; なし $num--; 4.配列 配列(記入方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 例 array = [1,2,3] const fruits = ['りんご', 'バナナ'] let fruits = ['りんご', 'バナナ'] $fruits = ['りんご', 'バナナ'] 配列(追加方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[順番] = 値 配列名[順番] = 値配列名.push('値') 配列名.append(値) $配列名[] = "値" 例 array[4] = "e" array[4] = "e" list1.append("品川") $stack[] = "ぶどう"; 配列(削除方法) 後で更新 配列(抽出方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[順番] 配列名[順番] 配列名[順番] $配列名[順番] 例 print 配列名[順番] print 配列名[順番] なし print $配列名[順番] 5.配列 ハッシュ 配列(記入方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名 = {"キー" => 値,"キー" => 値} 配列名 = ["キー": 値, "キー": 値] $配列名 = ["キー"=> 値, "キー"=> 値]; 例 hash = {"Lemon" => 100, "Orange" => 150} let dictionary = ["りんご": 青森, "バナナ": フィリピン] $hash = ["Lemon" => 100, "Orange" => 150]; 配列(追加方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[キー] = 値 配列名[キー] = 値 $配列名[キー] = "値" 例 hash["Banana"] = 90 fruits["いちご"] = 300 $stack["フルーツ"] = "ぶどう";  繰り返し文 for 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 for 変数 in オブジェクト do 実行する処理1 end for (初期化式; 条件式; 変化式){ 実行する処理1;} for 変数 in 開始値 ..< 終了値 {実行する処理1} for(初期値; 条件式; 変化式){実行する処理1} 例 for num in 1..3 doprint("num = ", num, "¥n")endprint("End") for (let i = 0; i < 5; i++) { console.log((i + 1) + '回目の処理です');} for i in 1..<10 {print("i: (i)")} for($i=0;$i<5;$i++){echo $i;}  while  関数 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 def メソッドの名前 やりたい処理endメソッドの名前 function 関数名(変数) {やりたい処理}関数名(変数名) func 関数名 (引数1:引数1の型, ...) -> 戻り値の型 {やりたい処理return 戻り値}関数名(変数) function 関数名(変数){処理内容return 返り値関数名(変数名)} 例 def hello puts "Hello World!"endhello function square(number){{return number * number;}] let arrayData = [3, 5, 8, 10]for data in arrayData{print("data: (data)")} <?phpfunction goaisatsu() {$message = 'Hello world!'; return $message;}echo goaisatsu(); ?> 条件分岐 IF 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 if 条件式1 then処理elsif 条件式2 then処理2elsedo 処理3end if (条件式1) {実行1}else if(条件式2){条件式2} if 条件式1 {処理1} else if 条件式2 {条件式2} else {処理3} if(条件){処理1}else{条件が偽であれば実行}else{条件が偽であれば実行} 例 a = 1if a > 3 thenputs "a is greater than 3"end var num = 70;if (num > 80) {console.log("numは80より大きいです。");} else if (num >= 60) {console.log("numは60~80の間です。"); } else {console.log("numは60未満です。");} var num = 5if ( num > 10 ) {print("10以上です")} else if ( num < 10 ) {print("10未満です")} else {print("それ以外");} $score = 90;if($score >= 80){echo “合格です!おめでとうございます!”;}else($score < 80){echo “不合格です!がんばりましょう!”}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む