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

ツイッター風Railsアプリをデプロイする(前編:unicornのみで取り急ぎ繋げよう)

この記事の基本的な方針

この記事は、過去記事で作ったアプリをEC2でデプロイします。
手を動かしながら読みたいようでしたら、以下でこのアプリを手に入れてください。

Terminal
$ git clone https://github.com/annaPanda8170/cheaptweet.git
$ bundle install
$ bundle exec rake db:create
$ bundle exec rake db:migrate

これ自体の作り方は、こちら
Rails5.2.4.2_でのみ動作確認しています。
基本解説はしません。手順のみ示します。

想定する読み手

既に一度Railsアプリをチュートリアルやスクール等で作りデプロイしたこのある方を想定しています。
Mac使用で、パソコンの環境構築は完了し、AWSのアカウントを持っていることが前提です。

具体的な手順

①インスタンスを作り、ssh接続でログインする

 instance.png

ami.png

type.png

key.png

ela.png

add.png

rela.png

check.png

11.png

22.png

33.png

Terminal(ローカル)
# ホームディレクトリ直下に.ssh/隠しディレクトリを事前に作ってます

$ cd
# 別に移動しなくても問題ないが、隠しディレクトリに入れといた方が無難
$ mv Downloads/****鍵の名前****.pem .ssh/

$ cd .ssh/

# ****鍵の名前****.pemのファイルに関して所有者のみ読み出し・書き込みの権限を与える意
# (所有者も実行権限がなく、所有者グループとその他はなんの権限もない)
$ chmod 600 ****鍵の名前****.pem

# ログイン
$ ssh -i ****鍵の名前****.pem ec2-user@****ここはElasticIP****
Output
Are you sure you want to continue connecting (yes/no)?
Terminal(ローカル)
yes
Output
Warning: Permanently added '54.250.55.251' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/

②諸々インストールと、GitHub連携

Terminal(EC2)
# もしアップデートしろと言われたら以下を実行
# アップデートしろと言われてなくてやっても問題ないので一応やってもいいかも
$ sudo yum -y update

# 諸々基本インストール

$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
$ sudo yum -y install nodejs  # 今回はJSは使ってないが一応

# 諸々Ruby・Rails関係インストール

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv rehash 
# 自身のRubyのバージョンを確認して以下。結構時間かかります
$ rbenv install 2.5.1
$ rbenv global 2.5.1
$ rbenv rehash
# 確認は
# ruby -v

# MySQLインストール
$ sudo yum -y install mysql56-server mysql56-devel mysql56

# MySQL起動
$ sudo service mysqld start
# 確認は
# sudo service mysqld status

# MySQLパスワード設定
$ sudo /usr/libexec/mysql56/mysqladmin -u root password
# 確認は
# mysql -u root -p

# SSH鍵ペア関連

# 鍵ペア作成
$ ssh-keygen -t rsa -b 4096
# この後何も入力せずにEnter三回
# 鍵ペア表示
$ cat ~/.ssh/id_rsa.pub
# 表示された値を ssh-rsa から最後までまるまるコピー
webBrowser
https://github.com/

git.png

ee.png

ssh.png

Terminal(EC2)
$ ssh -T git@github.com
Output
Are you sure you want to continue connecting (yes/no)?
Terminal(EC2)
yes

③unicorn導入

Gemfile
# 省略
group :production do
  gem 'unicorn', '5.4.1'
end
# 省略
Terminal(ローカル)
$ bundle install

config/unicorn.rbを作成

config/unicorn.rb
app_path = File.expand_path('../../', __FILE__)
worker_processes 1
working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen 3000
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"
timeout 60
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
  if run_once
    run_once = false 
  end
  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exist?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH => e
      logger.error e
    end
  end
end
after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end
config/environments/production.rb
# 以下をコメントアウトする
# config.assets.js_compressor = :uglifier     
config/database.yml
#production:
#  <<: *default
#  database: ***名前***_production
#  username: ***名前***
#  password: <%= ENV['***名前***_DATABASE_PASSWORD'] %>

#    |
#    V

production:
  <<: *default
  database: '***名前***'_production
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

プッシュしてmasterにマージする

Terminal(EC2)
$ cd
$ sudo mkdir /var/www/
$ sudo chown ec2-user /var/www/
$ cd /var/www/

gggit.png

Terminal(EC2)
$ git clone ***上でコピーしたGitHubのURL***

④Swap領域の追加

Terminal(EC2)
$ cd
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
$ sudo swapon /swapfile1
$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'
Terminal(EC2)
$ cd  /var/www/***アプリ名***
# ローカルでバンドラーのバージョンを確認
$ gem install bundler -v ***確認したバージョン***
$ bundle install

$ rake secret
#出てきたキーをコピー
$ sudo vim /etc/environment
/etc/environment
DATABASE_PASSWORD='***MySQLのパスワード***'
SECRET_KEY_BASE='***先程コピーしたキー***'
Terminal
# 再ログイン
$ exit
$ ssh -i ****鍵の名前****.pem ec2-user@***ここはElasticIP***

#上の環境変数の確認は
# env | grep SECRET_KEY_BASE
# env | grep DATABASE_PASSWORD

juki.png

juki2.png

ポート範囲が3000、ソースが0.0.0.0/0

juki4.png

Terminal(EC2)
$ cd /var/www/***アプリ名***
$ rails db:create RAILS_ENV=production
$ rails db:migrate RAILS_ENV=production
$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
$ rails assets:precompile RAILS_ENV=production

# 起動
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
webBrowser
http://***ここはElasticIP***:3000

以上でとりあえず、繋がるはずです。
ただ、非常に遅いですね。

パワーアップして通常のアプリとして動作させるにはNginxが必要です。
マージをコマンド一つで本番環境まで反映させるにはCapistranoが必要です。
これらの導入は後編で。

もし困ったら

①ログ確認

/var/www/***アプリ名***/log/unicorn.stderr.logtailcatlessvimあたりのコマンドで確認する。

②unicornの再起動

Terminal(EC2)
$ ps aux | grep unicorn
$ kill ***ユニコーンのPID***
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ruby on rails】Rails超入門0❗️RailsをRailsInstallerでwindows10にインストール

0.Railsinstallerとの出会い

rails6.0インストール⇒失敗
rails5.0インストール⇒失敗
sqlite3とのバージョンが合わない、
webpackerのインストール、nodejsのインストール
・・・・・
何故かうまくいかないのだ。
環境ができないと試すこともできない。
そんな時に出会ったのがRailsInstallerだった。

1.RailsInstallerのダウンロードとインストール

1.画面に従ってインストールする。
ここから欲しいバージョンのものをダウンロードをする。

railsinstaller1.jpg

※railsinstaller:ruby on railsを構築する上で必要なソフトが入った
all in one packageのようなもの

私はrailsinstaller-3.4.0.exeを入手した。

2.コマンドプロンプトでruby.exeのあるフォルダに移動
c:\RailsInstaller>cd Ruby2.3.3

2.Railsアプリケーションの作成

(1)下記コマンドを入力する(rails_appはアプリケーション名)
c:\RailsInstaller\Ruby2.3.3>rails new rails_app

(2)bundlerを下記コマンドでインストールする。

c:\RailsInstaller\Ruby2.3.3\rails_app>gem install bundler
Fetching: bundler-2.1.4.gem (100%)
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Installing ri documentation for bundler-2.1.4
Done installing documentation for bundler after 25 seconds
1 gem installed

(3)c:\RailsInstaller\Ruby2.3.3\rails_app>rails server

Could not find gem 'uglifier (>= 1.3.0) x86-mingw32' in any of the gem sources listed in your Gemfile.
Run bundle install to install missing gems.

c:\RailsInstaller\Ruby2.3.3\rails_app>bundle install

(4)色々エラーが出てくるので
bundle installコマンドを入力する。

c:\RailsInstaller\Ruby2.3.3\rails_app>bundle install
(略)
An error occurred while installing sqlite3 (1.4.2), and Bundler cannot continue.
Make sure that gem install sqlite3 -v '1.4.2' --source 'https://rubygems.org/'
succeeds before bundling.

In Gemfile:
sqlite3

(5)Gemfileの修正

sqlite3でエラーが出ている。
rails_app(アプリケーションフォルダ内)内のGemfileの下記部分を

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

下記のように1.3系に修正する

# Use sqlite3 as the database for Active Record
#gem 'sqlite3'
gem 'sqlite3', '~> 1.3.13'

(6)bundle installコマンドを入力する。

Bundle complete! 13 Gemfile dependencies, 66 gems now installed.
Use bundle info [gemname] to see where a bundled gem is installed.

何もエラーが出なければ終了。

3.rails serverコマンドで接続を確認

c:\RailsInstaller\Ruby2.3.3\rails_app>rails server
=> Booting Puma
=> Rails 5.1.7 application starting in development
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.12.4 (ruby 2.3.3-p222), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Started GET "/" for ::1 at 2020-03-10 13:43:37 +0900
Processing by Rails::WelcomeController#index as HTML
Started GET "/" for ::1 at 2020-03-10 13:43:40 +0900
Processing by Rails::WelcomeController#index as HTML
  Rendering C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.1.7/lib/rails/templates/rails/welcome/index.html.erb
  Rendering C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.1.7/lib/rails/templates/rails/welcome/index.html.erb
  Rendered C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.1.7/lib/rails/templates/rails/welcome/index.html.erb (122.0ms)
  Rendered C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.1.7/lib/rails/templates/rails/welcome/index.html.erb (0.0ms)
Completed 200 OK in 4508ms (Views: 1335.9ms)

(2)http://localhost:3000/
で下記の画面が出たら成功

railsinstaller_server_ok.jpg

最後に

こうすると、楽にインストールできるよとか、
SQLiteだけでなく、他のdbも使えるとか教えて頂けると嬉しいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

vagrantとDockerで環境構築をした

はじめに

Vagrantを使う「Mac最速のDocker環境」を初心者向けに解説を参考に環境構築をしたときにエラーとなったことをまとめて書いていきます。

VirtualBoxをインストールから、Mutagenのインストール・セットアップまでは問題なくできたので、その次のコマンドから書いていきます。

Vagrantを起動

コマンド実行後に、エラーが発生しました。

$ vagrant up
/Users/hoge/.vagrant.d/gems/2.4.9/gems/vagrant-mutagen-0.1.2/lib/vagrant-mutagen/Mutagen.rb:22:in `initialize': No such file or directory @ rb_sysopen - /Users/hoge/.ssh/config (Errno::ENOENT)

configが無いと言われているので、作ってあげます。
ディレクトリ名かと思ってたらファイル名でした

$ touch /Users/hoge/.ssh/config

再度、upすると今度は成功するはずです。

$ vagrant up

仮想環境にSSH接続

接続はすんなりできました。

$ vagrant ssh
root@087fc4a682c3:/ cd app
root@087fc4a682c3:/app# docker-compose -f docker-compose.dev.yml build
root@087fc4a682c3:/app# docker-compose -f docker-compose.dev.yml up

# dockerにログインしてないとエラーが出たらログインしましょう
root@087fc4a682c3:/app# docker login

さいごに

Vagrantを使う「Mac最速のDocker環境」を初心者向けに解説は初心者の私にとってわかりやすかったです。
さらなるエラー箇所については、解決したら追記していきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

関連する質問を表示したい(Q&Aサイト)

現在ポートフォリオとして大学受験をテーマにしたQ&Aサイトを作成しています

関連する質問を表示する機能の実装に手間取ったので、自分用にまとめ。

何をもって関連とするか

質問同士を関連づけるための基準が必要ですが、今回は質問にカテゴリーを紐付け、同じカテゴリーに属するものを関連する質問とします

モデル

models/question.rb
  has_many :category_relationships
  has_many :categories, through: :category_relationships, source: :category
models/category_relationship.rb
belongs_to :question
belongs_to :category
models/category.rb
  has_many :category_relationships
  has_many :questions, through: :category_relationships, source: :question

実装

実現したい動き

questionモデルのインスタンスメソッドとして、関連する質問を取得するrelated_questionsメソッドを追加します

  1. 特定の質問から、カテゴリーを取得
  2. そのカテゴリー毎の質問を取得
  3. 上記の操作で得た質問の配列を「関連する質問」とし、そのいくつかをランダムで表示する(今回は4つ)
  4. 質問の重複と、レシーバーとなる質問自身を含まないように配慮

このような形で実装していきたいと思います

1.特定の質問から、カテゴリーを取得

  1. CategoryRelationshipテーブルから、question_idがレシーバーと等しいレコードを取得
  2. そのレコードからカテゴリーを取得
  3. 上記の結果をrelated_categoriesという変数にいれる

可読性を考慮して、selfをつけておきます

models/question.rb
def related_questions
  related_categories = CategoryRelationship.where(question_id: self.id).map(&:category)
end

2.カテゴリー毎の質問を取得

  1. 質問を入れておくために、related_questionsというからの配列を定義
  2. related_categories内のカテゴリー一つ一つから、関連する質問を取得する
  3. その質問をrelated_questionsに入れていく
models/question.rb
def related_questions
  related_categories = CategoryRelationship.where(question_id: self.id).map(&:category)
  # ここから
  related_questions = []
  related_categories.each do |category|
    category.questions.each do |question|
      related_questions << question
    end
  end
  # ここまで追加
end

eachがネストしちゃってますが…とりあえず動くのでこのままで。
より良い方法を思いついたら追記します

3.ランダムで取得

明示的にreturnをつけておきます

models/question.rb
def related_questions
  related_categories = CategoryRelationship.where(question_id: self.id).map(&:category)
  related_questions = []
  related_categories.each do |category|
    category.questions.each do |question|
      related_questions << question
    end
  end
  # ここから
  return related_questions.sample(4)
  # ここまで追加
end

4.重複を避ける

このままでは複数のタグをつけている質問が重複して取得される可能性がありますね
related_questions.distinct.sample(4)
的なことをしたいんですが、配列に対してdistinctを使うとエラーが発生します

Question.first.related_questions.distinct.sample(4)
=> NoMethodError: undefined method `distinct' for #<Array:xxxxx>

配列から重複を取り除いてくれるメソッドを探してみたところ、uniqというメソッドを発見しました
https://docs.ruby-lang.org/ja/latest/method/Array/i/uniq.html

これを使いましょう

models/question.rb
def related_questions
  related_categories = CategoryRelationship.where(question_id: self.id).map(&:category)
  related_questions = []
  related_categories.each do |category|
    category.questions.each do |question|
      related_questions << question
    end
  end
  return related_questions.uniq.sample(4) #この行に追記
end

5.レシーバー自身を含めない

このままではrelated_questions内にレシーバー自身が含まれてます
related_questions.distinct.where.not(questions_id: self.id).sample(4)
的なことをしたいんですが、配列に対してwhereを使うと上と同じエラーが発生します

ここは素直にif文を使っていきます

models/question.rb
def related_questions
  related_categories = CategoryRelationship.where(question_id: self.id).map(&:category)
  related_questions = []
  related_categories.each do |category|
    category.questions.each do |question|
      related_questions << question unless question == self #この行に追記
    end
  end
  return related_questions.uniq.sample(4)
end

これでメソッドは完成です!
N+1対策もやっておきたいところです

表示するまでの部分は省略します

最後に

最初に書きましたが、何をもって関連とするのかが重要な気がします
他のサイトの関連するものを表示する機能ってどうなってるんですかね…
同じカテゴリー内でPV数、いいね数を基準にする形の実装もやってみたいです

おかしい部分への指摘やアドバイスなどいただけると嬉しいです

自分のポートフォリオでは今回の実装とコードが少し異なるのですが、大体同じ流れで実装してます。
テストも書いてるので良かったらのぞいてみてください
https://github.com/YutoKashiwagi/Ukarimi/pull/93/files
こっちのコードについての意見も大歓迎です!(むしろこっちに対するレビューが欲しいです)

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【爆速成長!】プログラミング駆け出し〜オリジナルポートフォリオ作成までに参考にしたサイト一覧

はじめに

完全未経験の30歳文系が、プログラマー転職に向けて活動してきました。
2019年8月に初めてProgateでプログラミングに触れてから、約5ヶ月。
2020年3月現在、オリジナルポートフォリオの完成まで至りました。

最初の頃は右も左もホンッットに何も分からない状態でした。
その当時を思い返すと、少しは成長したのかなーって思います。

分からないことは即調べて、有益に感じたサイトやQiitaの記事は全てお気に入りに入れていました。

そこで、これまで参考にさせて頂いたサイトを一つにまとめてみます。
※カテゴリー別にまとめてみました

参考になったサイト

学習方法・概念・その他有益なもの

未経験者には全てが黒魔術に見える呪いがある
https://qiita.com/mackey0022/items/73f77873facc22e22c8c

不思議の国のSE用語
https://qiita.com/t_nakayama0714/items/478a8ed3a9ae143ad854

質問は恥ではないし役に立つ
https://qiita.com/seki_uk/items/4001423b3cd3db0dada7

プログラミング初心者歓迎!「エラーが出ました。どうすればいいですか?」から卒業するための基本と極意(解説動画付き)
https://qiita.com/jnchito/items/056325421b7e36f02335

コード関連

良いコードを書く技術(まとめ)
https://qiita.com/NoriakiOshita/items/e60ab5bb01b90d927ae5

CSSのクラス名を決めるときに使うリストをつくりました
https://qiita.com/manabuyasuda/items/dbb76ed36970bec95470

Naming -名前付け-
https://qiita.com/Koki_jp/items/f3d3e824f98d182d4100

コマンド関連

Macのターミナルコマンド一覧(基本編)
https://qiita.com/ryouzi/items/f9dee1540a04a0bfb9a3

Linuxターミナルコマンド一覧(中級編)
https://qiita.com/ryouzi/items/73f63f09573b7b4e246c

HTML関連

SEO対策として最低限押さえておきたいHTML/HTML5マークアップの大事な6つのポイント
https://creive.me/archives/8814

HTMLのtableでテーブルを作る方法と応用テクニックを解説
https://webliker.info/02035/

CSS関連

もう迷わない!CSS Flexboxの使い方を徹底解説
https://webdesign-trends.net/entry/8148#i-2

カラーコード一覧表
http://www.netyasun.com/home/color.html

上下中央揃えのCSSまとめ
Flexboxがたった3行で最も手軽
https://ics.media/entry/17522/

Bootstrap関連

とほほのBootstrap 4入門
http://www.tohoho-web.com/bootstrap/index.html

Bootstrapのグリッドシステムの使い方を初心者に向けておさらいする
http://websae.net/twitter-bootstrap-grid-system-21060224/

Bootstrap4カラムの位置を調整【カラムのオフセット】
https://webnetamemo.com/coding/bootstrap4/201902227791

Ruby/Rails関連

【Ruby/Ruby on Rails】重要用語・基礎知識まとめ【プログラミング学習開始128日目】
https://qiita.com/fuku_tech/items/4d2517ec5bbd53726997

[Ruby] privateメソッドの本質とそれを理解するメリット
https://qiita.com/kidach1/items/055021ce42fe2a49fd66

Railsのモデル検索あれこれ
https://qiita.com/tono0123/items/576a4a4659b51860f304

【Rails】form_forの使い方を徹底解説!
https://pikawaka.com/rails/form_for

bundler、bundle execについて ※自分用メモ
https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8

rails generate migrationコマンドまとめ
https://qiita.com/zaru/items/cde2c46b6126867a1a64

Railsバリデーションまとめ
https://qiita.com/h1kita/items/772b81a1cc066e67930e

Railsのバリデーションエラーのメッセージの日本語化
https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b

[Rails]不要になったmodelの削除方法
https://bokuranotameno.com/post-9880/

Rails で includes して N+1 問題対策
https://qiita.com/hirotakasasaki/items/e0be0b3fd7b0eb350327

Rails5.2から追加された credentials.yml.enc のキホン
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39

git関連

Gitコマンド早見表
https://qiita.com/kohga/items/dccf135b0af395f69144

君には1時間でGitについて知ってもらう(with VSCode)
https://qiita.com/jesus_isao/items/63557eba36819faa4ad9

git commit を取り消して元に戻す方法、徹底まとめ
http://www-creators.com/archives/1116

[Git] .gitignoreの仕様詳解
https://qiita.com/anqooqie/items/110957797b3d5280c44f

GitHubで特定のファイルやフォルダを管理対象から除外する方法
https://fantastech.net/gitignore

DB関連

4ステップで作成する、DB論理設計の手順とチェックポイントまとめ
https://qiita.com/nishina555/items/a79ece1b54faf7240fac

【DB設計の基礎】DBとは?〜論理設計
https://qiita.com/yosemite2307/items/33f42f4337c8ee9b0a9d

よく使うMySQLコマンド集
https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4

若手プログラマー必読!5分で理解できるER図の書き方5ステップ
https://it-koala.com/entity-relationship-diagram-1897

Devise関連

Devise+OmniAuthでユーザ認証を実装する手順
https://qiita.com/zenizh/items/94aec2d94a2b4e9a1d0b

[Rails] deviseの使い方(rails5版)
https://qiita.com/cigalecigales/items/f4274088f20832252374

【Rails】deviseの使い方を徹底解説!
https://pikawaka.com/rails/devise

Rspec関連

使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」
https://qiita.com/jnchito/items/42193d066bd61c740612

Rails5でコントローラのテストをController specからRequest specに移行する
https://qiita.com/t2kojima/items/ad7a8ade9e7a99fb4384

Solidus関連

Solidus - Productsまわりの概念まとめ
https://forest-valley17.hatenablog.com/entry/2018/10/10/094742

docker関連

【図解】Dockerの全体像を理解する -前編-
https://qiita.com/etaroid/items/b1024c7d200a75b992fc

Dockerの基礎をまとめてみた ~ 第一章:コンテナ?Dockerとは?
https://qiita.com/supaiku2452/items/8b06b774c0e2fce7df92

コンテナ開発の始め方
https://qiita.com/niisan-tokyo/items/bcb89c9de82ba465d200

Docker、ボリューム(Volume)について真面目に調べた
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32

docker-composeを使うと複数コンテナの管理が便利に
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce

いまさらだけどDockerに入門したので分かりやすくまとめてみた
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1

docker-compose コマンドまとめ
https://qiita.com/wasanx25/items/d47caf37b79e855af95f

Rubocop関連

Railsの品質を上げるRuboCopとは?インストールや使い方を紹介!
https://kitsune.blog/rails-rubocop

AWS関連

(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce

無料!かつ最短?で Ruby on Rails on Docker on AWS のアプリを公開するぞ。
https://qiita.com/at-946/items/1e8acea19cc0b9f31b98

サーバー・本番環境関連

なぜrailsの本番環境ではUnicorn,Nginxを使うのか?  ~ Rack,Unicorn,Nginxの連携について ~【Ruby On Railsでwebサービス運営】
https://qiita.com/takahiro1127/items/fcb81753eaf381b4b33c

RailsアプリをAWS、unicorn、nginxで手動デプロイして独自ドメインを紐づけるまで
https://qiita.com/happytarou0228/items/3771b13217483c35965d

最後に

個人的には、特にAWSや本番環境構築に大苦戦しました。
駆け出しエンジニアの皆さんに、少しでも役立てもらえたら幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ポートフォリオ公開

学習期間3ヶ月の初学者がポートフォリオを公開してみる。

なぜ書いたか?

ふとダウンロードしたアプリによって余命を知りこのままではまずいと焦った。(現在28歳あと51年の余命だそうです。)
余命タイマー

AWSの漫画を読んでいたところ「アウトプットしないのは知的な便秘」という話から便秘は嫌だなーと思いたち急遽この記事を書いております。

最初の記事で何を書こうか迷ったのですが、いきなりすごい記事は書けないので、プログラミングスクールに3ヶ月通い、そこで得た知見と自己学習の成果を発表することで、今からプログラミングを学び始める方の参考になればいいなと思い書かせていただきます。

自己紹介

初めまして。いつもQiitaの記事にはお世話になっております。私の経歴からお話しさせていただくと、もともと消防士を4年ほどしていまして、今はエンジニア転職を目指す28歳です。
元々コンピューターには疎く仕事でもそれほどパソコンは触らないので、タッチタイピングもできない状態でmac?何それ美味しいの?あーポテト食べたくなってきた。からのスタートでした。
本格的にプログラミングを学び始めたのは2019年の12月からです。これから発信活動もしていけたらと思っています!

はじめに

いきなりですがポートフォリオを実際に見てもらった方が早いと思うので一部公開します。
またプログラミングにこれから触れる方向けに記事を書いておりますので用語の説明をなるべく噛み砕いてさせていただいてます。つよつよエンジニアのみなさん、間違っているところありましたらコメントしていただけると幸いです。

概要

メンターマッチングサイトMENTAのクローン(模倣)サイトです。

開発環境

  • Docker 19.03.5 (コンテナという技術を用いてアプリを立ち上げるための環境構築が楽になる)
  • CircleCI 2.0 (自動でテストを行う。githubというサービスを用いてインターネットに自分のソースコードをあげたときに自動的にテストを行う仕組み)
  • Ruby on Rails 5.2.4.1 (Rubyをもちいてアプリを簡単に作れるようにしたもの。フレームワークと呼ばれる)
  • Ruby 2.5.1 (日本人のまつもとさんが作った偉大なプログラミング言語)
  • MySQL 5.6 (データベース、いろいろなデータが入っているエクセルみたいなもの)
  • unicorn 5.4.1 (アプリケーションサーバー、動きがある画面を返すパソコンみたいなもの)
  • nginx 1.16.1 (webサーバー、文字だけなど静的な画面を返すパソコンみたいなもの)

環境仕様

  • Dockerによる開発環境構築
  • CircleCIによる自動テスト(rubocop,siderによる自動コードレビュー、ソースコードを綺麗にしてくれるもの)
  • CapistranoによるAWSへの自動デプロイ (デプロイ・・・インターネットに自分のサイトを公開すること、AWS・・・アマゾンがやっているサーバーのサービス)

アプリケーション仕様

  • ユーザーサインイン・ログイン機能
  • ユーザー編集、削除(退会)機能
  • プラン投稿、編集、削除機能
  • メッセージ送受信機能、返信機能
  • ユーザーフォロー機能
  • タグ機能
  • 記事投稿、編集、削除機能
  • メンター検索機能、タグ検索機能

制作期間 

3週間から1ヶ月

DEMO

  • TOPページ
    screencapture-18-178-33-110-2020-03-27-11_45_19

  • メインページ
    screencapture-18-178-33-110-users-2020-03-27-11_47_18

  • プラン作成画面
    screencapture-localhost-3000-plans-new-2020-03-22-23_00_51

  • メンター一覧画面
    screencapture-18-178-33-110-plans-new-arrival-mentor-2020-03-27-11_49_02

  • メンタースキル絞り込み画面
    screencapture-18-178-33-110-plans-search-2020-03-27-11_50_31

  • プラン詳細画面
    screencapture-18-178-33-110-plans-22-2020-03-25-15_44_53

  • プロフィール画面
    screencapture-18-178-33-110-users-31-2020-03-25-15_38_31

  • 退会確認画面
    screencapture-localhost-3000-users-1-delete-confirm-2020-03-22-23_06_25

やったこと

  • 3ヶ月間、毎日10時間はパソコンの画面を見つめました。(おかげで視力が悪くなったかも笑)
  • スクールの友人とアウトプットをする(説明できないことは理解が足りていない)
  • ひたすらググる。(ただググるだけではなく仮説を立ててからググる)

こうすればよかったこと

コピペは辞める。(理解してコピペならいいが思考停止でコピペは本当によくない。)

アプリを作ってみて

  • 筋トレと一緒で頭を悩ましている(脳みそに負荷をかけている)時が一番成長している気がする。
  • 最初は辛いけど徐々にできることが増えていき楽しくなってくる...はず笑
  • あるあるだと思いますが、プログラミングを知らない人にアプリを見せてもあまり興味を持ってくれない:joy:(家族に見せてもへーくらいの感想しかもらえない。でもそれが本当のユーザーの反応なのである笑)
  • まだまだ全然完成してないんですが、就活始めなきゃということで僕の実力ではここまででした。
3ヶ月間毎日少しずつでも学習すれば優秀なみなさんならもっといいものが作れると思います。これからプログラミングを始める方の参考になれば幸いです。
最後までみていただきありがとうございます!
もしソースコードを公開してほしいというリクエストがありましたらコメントよろしくお願いします!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

学習期間3ヶ月の初学者がポートフォリオを公開してみる。

なぜ書いたか?

いつもと変わらぬ1日が始まり、なんとなしに携帯をいじっていると余命診断アプリなるものを見つけました。面白そうだなと思い、ダウンロードして余命を診断してみるとなんとあと51年しか生きられないというではありませんか。
人によってはあと51年もあると考えるのかもしれませんが、なんとなくあと70年くらいは生きられるとのほほんと考えていた私にとってこの51年というのはあまりに少ない。何か後世に残さなければということで筆を...じゃなくてキーボードを叩いているところでございます。
余命タイマー

また個人的にAWSの勉強をし始めたのですが、とっかかりにAWSの漫画を読んでいたところ「アウトプットしないのは知的な便秘」というフレーズから便秘は嫌だなーと思い急遽この記事を書いております。

最初の記事で何を書こうか迷ったのですが、いきなりすごい記事は書けないので、プログラミングスクールに3ヶ月通い、そこで得た知見と自己学習の成果を発表することで、今からプログラミングを学び始める方の参考になればいいなと思い書かせていただきます。

自己紹介

初めまして。いつもQiitaの記事にはお世話になっております。私の経歴からお話しさせていただくと、もともと消防士を4年ほどしていまして、今はエンジニア転職を目指す28歳です。
元々コンピューターには疎く仕事でもそれほどパソコンは触らないので、タッチタイピングもできない状態でmac?何それ美味しいの?あーポテト食べたくなってきた。という状態からのスタートでした。
本格的にプログラミングを学び始めたのは2019年の12月からです。これから様々なことにチャレンジしていけたらと思っています!
最近はひたすらプログラミングと英語に明け暮れる毎日です。

はじめに

さっそくですがポートフォリオを実際に見てもらった方が早いと思うのでここに公開します。
またプログラミングにこれから触れる方向けに記事を書いておりますので用語の説明をなるべく噛み砕いてさせていただいてます。つよつよエンジニアのみなさん、間違っているところやお気づきの点がありましたらコメントしていただけるととても嬉しいです。
(就活中なのでサイトとgithubを公開するか迷ったんですが、つよつよエンジニアの方のアドバイスがもらえるかもしれないと考えたら機会損失になるのはもったいないと思い公開しました:sunglasses:

アプリタイトル

first_skill_app

URL

https://firstskillapp.com/

github

https://github.com/gangelion/first_skill_app

概要

メンターマッチングサイトMENTAのクローンサイトです。
https://menta.work/

テストアカウント

  • BASIC認証
    • ユーザー名 : 1111
    • パスワード : 1111
  • メールアドレス : test@1
  • パスワード : 11111111
    • 万が一テストユーザーが消えている場合はメールアドレスtest@*でログインできます。(*に数字を入れてください)

開発環境

  • Docker 19.03.5 (コンテナという技術を用いてアプリを立ち上げるための環境構築が楽になる)
  • CircleCI 2.0 (自動でテストを行う。githubというサービスを用いてインターネットに自分のソースコードをあげたときに自動的にテストを行う仕組み)
  • Ruby on Rails 5.2.4.1 (Rubyをもちいてアプリを簡単に作れるようにしたもの。フレームワークと呼ばれる)
  • Ruby 2.5.1 (日本人のまつもとさんが作った偉大なプログラミング言語)
  • MySQL 5.6 (データベース、いろいろなデータが入っているエクセルみたいなもの)
  • unicorn 5.4.1 (アプリケーションサーバー、動きがある画面を返すパソコンみたいなもの)
  • nginx 1.16.1 (webサーバー、文字だけなど静的な画面を返すパソコンみたいなもの)

環境仕様

  • Dockerによる開発環境構築
  • CircleCIによる自動テスト(rubocop,siderによる自動コードレビュー・・・ソースコードを綺麗にしてくれるもの)
  • CapistranoによるAWSへの自動デプロイ (デプロイ・・・インターネットに自分のサイトを公開すること、AWS・・・アマゾンがやっているサーバーのサービス)
  • AWS(EC2,VPC,route53,Certificate Manager)(AWSの各種サービスです。)

アプリケーション仕様

  • ユーザーサインイン・ログイン機能
  • ユーザー編集、削除(退会)機能
  • プラン投稿、編集、削除機能
  • メッセージ送受信機能、返信機能
  • ユーザーフォロー機能
  • タグ機能
  • 記事投稿、編集、削除機能
  • メンター検索機能、タグ検索機能

制作期間 

3週間から1ヶ月

DEMO

  • TOPページ
    screencapture-18-178-33-110-2020-03-27-11_45_19

  • メインページ
    screencapture-18-178-33-110-users-2020-03-27-11_47_18

  • プラン作成画面
    screencapture-localhost-3000-plans-new-2020-03-22-23_00_51

  • メンター一覧画面
    screencapture-18-178-33-110-plans-new-arrival-mentor-2020-03-27-11_49_02

  • メンタースキル絞り込み画面
    screencapture-18-178-33-110-plans-search-2020-03-27-11_50_31

  • プラン詳細画面
    screencapture-18-178-33-110-plans-22-2020-03-25-15_44_53

  • プロフィール画面
    screencapture-18-178-33-110-users-31-2020-03-25-15_38_31

  • 退会確認画面
    screencapture-localhost-3000-users-1-delete-confirm-2020-03-22-23_06_25

やったこと

  • 3ヶ月間、毎日10時間はパソコンの画面を見つめました。(おかげで視力が悪くなったかも笑)
  • スクールの友人とアウトプットをする(説明できないことは理解が足りていない)
  • ひたすらググる。(ただググるだけではなく仮説を立ててからググる)

こうすればよかったこと

コピペは辞める。(理解してコピペならいいが思考停止でコピペは本当によくない。)

アプリを作ってみて

  • 筋トレと一緒で頭を悩ましている(脳みそに負荷をかけている)時が一番成長している気がする。
  • 最初は辛いけど徐々にできることが増えていき楽しくなってくる...はず笑
  • あるあるだと思いますが、プログラミングを知らない人にアプリを見せてもあまり興味を持ってくれない:joy:(家族に見せてもへーくらいの感想しかもらえない。でもそれが本当のユーザーの反応なのである笑)
  • まだまだ全然完成してないんですが、就活始めなきゃということで僕の実力ではここまででした。(これからも修正やアップデートはしていくつもりです。)
3ヶ月間毎日少しずつでも学習すれば優秀なみなさんならもっといいものが作れると思います。これからプログラミングを始める方の参考になれば幸いです。
最後までみていただきありがとうございます!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

vagrant(CentOS7)環境でrails6 + MySQLの環境構築(半分は自分メモ)

はじめに

今回の投稿が初投稿になります。至らない点が多々あるかと思いますが参考にしていただけると幸いです。
最後の方がグダグダしてたりするのでご了承ください。
また、VirtualBox + Vagrantは始めから入っている状態から入っている前提でお話しさせていただきます。

こちらの記事を参考にさせていただきました。
Windows 10 + VirtualBox + Vagrant + CentOS + Rails で、”Yay! You’re on Rails!”まで

環境

ホストos
・windous10 pro
・Vagrant 2.2.6

ゲストos
・centos7
・ruby 2.7.0
・rails 6.0.2.2

ホストOSでの準備

はじめに、vagrantがはいっているか確認します。

C:\Users\hogetarou\vagrant>vagrant --version
Vagrant 2.2.6

続いて作業用のディレクトリを作っていきます。

C:\Users\hogetarou\vagrant>mkdir rails
C:\Users\hogetarou\vagrant>cd rails
C:\Users\hogetarou\vagrant\rails>vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'centos/7' (v1905.1) for provider: virtualbox
The box you're attempting to add already exists. Remove it before
adding it again or add it with the `--force` flag.

Name: centos/7
Provider: virtualbox
Version: 1905.1

C:\Users\hogetarou\vagrant\rails>vagrant box list
centos/7 (virtualbox, 1905.1)

box listにcentos/7が追加されていたら問題ないです。

C:\Users\hogetarou\vagrant\rails>vagrant init centos/7

このコマンドでディレクトリの中にVagrantfileが作成されていますので設定します。
33行目あたりに
config.vm.network "private_network", ip: "192.168.33.10"
があるのでコメントアウトを外してください。

終わったら仮想環境を立ち上げてsshで仮想環境に入ります。

C:\Users\hogetarou\vagrant\rails>vagrant up
...
...結構長いです
...
C:\Users\hogetarou\vagrant\rails>vagrant ssh
[vagrant@localhost ~]$

ゲストOSでの作業

rbenvのインストール

gitをインストールしてからいろいろ持ってきます。

$ sudo yum install -y git

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

ruby-buildのインストール

$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ sudo ./install.sh

rbenvの確認

$ rbenv -v
rbenv 1.1.2-28-gc2cfbd1

必要なパッケージをインストール

$ sudo yum install -y openssl-devel readline-devel zlib-devel mysql-devel gcc gcc-c++
$ sudo yum install -y epel-release
$ sudo yum install -y nodejs --enablerepo=epel

rbenvを使ってrubyをインストール

初めどのバージョンがインストールできるか確認します。

$ rbenv install -l
...
2.7.0-dev
2.7.0-preview1
2.7.0-preview2
2.7.0-preview3
2.7.0-rc1
2.7.0-rc2
2.7.0
2.8.0-dev
jruby-1.5.6
jruby-1.6.3
...

今回はruby2.7.0をインストールします。
注釈 このインストールは長いです!!何も反応がありませんが、ちゃんと動いてます!待ってあげて!

$ rbenv install 2.7.0

rubyを設定します。

$ rbenv rehash
$ rbenv global 2.7.0

バージョンの確認

$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]

railsをインストール

バージョンを指定するときは
$ gem install -v 6.0.0 rails
みたいな感じで指定可能です。

$ gem install rails

バージョンの確認

$ rails -v
Rails 6.0.2.2

DB(MySQL)をインストール

npmとnode.jsがしっかりとインストールされているか確認

$ npm -v
3.10.10
$ node -v
v6.17.1

mariaDBが入っている可能性があるので念のため削除

$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql/

MySQLの公式のyumリポジトリを追加。
そしてインストール。確認もしましょう。

$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
...
...もろもろ

$ sudo yum -y install mysql-community-server
...
...もろもろ

$ sudo mysqld --version
mysqld  Ver 5.7.29 for Linux on x86_64 (MySQL Community Server (GPL))

一行目のコマンドでCentOS起動の際自動で起動してくれるようになります。
MySQLserver起動

$ sudo systemctl enable mysqld.service
$ sudo systemctl start mysqld.service

止めるときはこれ
今回は使わない予定。

$ sudo systemctl stop mysqld.service

続いてuserとデータベースを作っていきます。

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ぬは。パスワードが無いって怒ってますね。
ってことでパスワードを探してログインします。

$ sudo  cat /var/log/mysqld.log | grep root
2020-03-26T14:23:10.121821Z 1 [Note] A temporary password is generated for root@localhost: あなたのパスワード

ps.私のパスワードの最後の文字が > でそれがパスワードの一部だと気づかないで結構な時間取られました。

そしてログイン

$ mysql -u root -p
Enter password: あなたのパスワード

初めにrootのパスワードを変えていきます。
パスワードですが8文字以上、英数大文字小文字と記号を使わないと、パスワードポリシーエラーになります。
例)Hogetarou<<0327

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'パスワード';

そして、userを作っていきます。
ここで作ったユーザー名とパスワードは後で使います!!!!!

mysql> create user 'ユーザー名'@'localhost' identified by 'パスワード(rootと別)';

最後に確認します。waninokoが私です。

mysql> select User,Host from mysql.user;
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| waninoko      | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

railsアプリ作成

$ rails new sample -d mysql

赤字でなんか文句言われました。
要するに、必要なgemが足りないって言ってきてます。

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
         run  bundle binstubs bundler
Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
       rails  webpacker:install
Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

さっき作成アプリケーションのディレクトリに移動してインストールします。

$ sudo yum install mysql-devel

終わったらgemfileのインストール

$ bundle

yarnをインストール

こちらを参考にさせていただきました。
ruby on rails 環境をセットアップするときの自分メモ

$ sudo yum remove nodejs npm #古いのが入っていれば削除
$ curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
$ sudo yum install -y nodejs
$ sudo npm install yarn -g

webpackerをインストール

bundle exec rails webpacker:install

nodeのバージョンエラーになる場合はこちらを実行してまたwebpakerをインストール

$ sudo npm install -g n
$ sudo n 9.11.2

これでとりあえずrails serverは問題なく起動するようになりました。
ここからデータベースの設定をしていきます。あと少しですw

database.ymlの設定とDBの作成

先ほど控えたDBのユーザー名とパスワードを書きます。
僕はatomのremote-ftpを使いましたが、viが書ける人はそちらを使ってもらって大丈夫です。

/config/database.yml
...
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: ユーザー名
  password: パスワード
  host: localhost
  socket: /var/lib/mysql/mysql.sock
...

続いてデータベースを作っていきます。

$ rails db:create
...
...
...
Created database 'sample_development'
Created database 'sample_test'

これでデータベースは完成!!!!
rails serverを起動

$ rails s -b 192.168.33.10
...
...
* Listening on tcp://192.168.33.10:3000
Use Ctrl-C to stop

最後にホストOS側のブラウザからアクセスして終わりです。お疲れさまでした。
http://192.168.33.10:3000/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails5 AWS EC2とRDS、S3、paperclipを使用したデプロイ

デプロイ覚書

基本的に下記記事を参考にさせて頂きました。
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce
https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2

上記記事の中では説明がなく自分がハマった箇所について。
まず
・画像投稿のストレージにS3を使用していた為その設定。
・あとRDSでデータベースを作成する際の文字コードの設定。
・デプロイ終わった後に大幅な修正を見つけてしまった際のやり方

S3使用時の設定について

https://qiita.com/nakki/items/6df87756ef4119cc3e68
コチラの記事を参考に実装しました。
デプロイ時にハマったのはunicornが起動しなかった。。。
ログを調べると
Cannot load Rails.config.active_storage.service
undefined method fetch for nilclass
コチラのエラーは同じエラー文での記事が見つけられませんでした。
デプロイの参考サイトと違う環境はS3を使っていることだし、active storageのエラーが出ていると言うことはやっぱりS3関係のエラーだろうと考えて調べる。。
ローカルではS3にちゃんと接続できて写真投稿も問題なくできていました。
ここのエラーに一日かかりました。。。
原因は、、、
config/environments/production.rbの設定でした。

config.require_master_key = true

このコードがデフォルトfalseでコメントアウトされているのですがtrueにして有効化。
これでproduction環境でS3に接続する環境変数が読み込まれるようになったようです。
確かにマスターキーがないと環境変数読み込めないですもんね。
これでunicorn問題なく起動OK。

RDSの文字コード

デプロイ終わってよっしゃー。会員ログインして動かしてみよ!
「ログイン」!→「エラー」

え?!

log/production.logを調べるとデータベースにレコード保存しようとしたときに文字コードが合わなくて弾かれた、と言うことらしい。
と言うことで下記記事参考に対応
https://qiita.com/kijitora-neko/items/aab58b4c1f684353e075

パッチ当てて再起動したんですがデータベース削除して作り直しても文字コードが変わらない。。。
3回くらいやったらやっと反映されました。。パッチが適用されるのにタイムラグがあるのかな?
同じ問題に当たった方は焦らずに設定確認して時間を置くことも必要かと。
もちろんそもそもRDSのデータベース作成時にパッチを作成して適用しておけばこのようなエラーは出ないかと。
次からは気をつけよう。

デプロイ後のアプリ修正

まあ、コチラはデプロイする前にちゃんとテストしとけよって話ですが。。。
デプロイしてからあれ?ここのリンク飛ばない?
あれ?問合せフォームから送信できない?
など等結構大幅に修正することがあったのでその時のやり方。

ちょっとした修正ならvimでコード修正してすぐ終わるかと思います。
でもいくつものファイルの修正や移動、削除など多くなってくるとコンソールからだと時間がかかる。。。

そこで一旦アプリ削除することにしました。
EC2インスタンスの/var/www/rails/アプリフォルダ
このアプリフォルダをコンソールで強制削除します。
nignx,unicorn,mysqlなどはこの上階層でインストールしているので影響なし。
アプリフォルダ削除後に再度git cloneして設定し直し。
と言っても作業量は大したことないです。
その後プリコンパイル、nignx,unicorn,mysqlの再起動して終わり。

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveStorageのseedデータを投入する際のエラー

Railsでアプリを作成する際、ActiveStorageを使って画像のseedデータを投入しようとしたところ、少しはまったので備忘録です。

seedデータが通らない

記事などを参考に

seeds.rb
user = User.find(1)
user.image.attach(io: File.open('app/assets/images/test.jpg'), filename: 'test.jpg')

とした後、

$ rails db:seed

としても通らないので、ぐぐってみる。

config/environments/development.rb
config.active_job.queue_adapter = :inline

を追記したら無事とおりました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

デプロイ時 よく使ったコマンドメモ 自分用

unicorn

起動 
bundle exec unicorn_rails -c config/unicorn.rb
unicorn_rails -c /var/www/rails/(アプリの名前)/config/unicorn.conf.rb -D -E production

状態確認
ps -ef | grep unicorn | grep -v grep

mysql

起動
sudo service mysqld start

production環境でのDB削除
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

接続
mysql -h エンドポイント -P 3306 -u root -p

DBの文字コードチェック
show variables like "chara%";

nignx

再起動
sudo nginx -s reload

vimコマンド

強制書き込み
$ sudo vim <ファイル名>
:w !sudo tee %
:q!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails6 のちょい足しな新機能を試す 125(endless range bug fix編)

はじめに

Rails 6 に追加された新機能を試す第125段。 今回は、endless range bug fix 編です。
Rails 6.0.0 では、 (1..) などのエンドレスな Range で include? メソッドを呼ぶと RangeError が発生するバグがありました。

Rails 6.0.1 以降では修正されています。

Ruby 2.6.5, Rails 6.0.1, Rails 6.0.0 で確認しました。

$ rails --version
Rails 6.0.1

今回は、 rails new して、 app ディレクトリの下にファイルを作って確認してみます。

Rails プロジェクトを作る

Rails プロジェクトを新たに作成します。

$ rails new rails_sandbox
$ cd rails_sandbox

スクリプトを作成する

Range#include? を実行するスクリプトを作成します。

scripts/endless_range.rb
p (1..).include?(2)

Ruby 2.6.5 では

エラーになりません。

$ ruby -v scripts/endless_range.rb
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
true

Rails 6.0.1 では

Rails 6.0.1 (以降) では、エラーになりません。

$ bin/rails runner scripts/endless_range.rb
Running via Spring preloader in process 263
true

Rails 6.0.0 では

RangeError が発生します。

$ bin/rails runner scripts/endless_range.rb
...
         2: from scripts/endless_range.rb:1:in `<main>'
         1: from /usr/local/bundle/gems/activesupport-6.0.0/lib/active_support/core_ext/range/include_time_with_zone.rb:14:in `include?'
/usr/local/bundle/gems/activesupport-6.0.0/lib/active_support/core_ext/range/include_time_with_zone.rb:14:in `last': cannot get the last element of endless range (RangeError)

試したソース

https://github.com/suketa/rails_sandbox/tree/try125_endless_range

参考情報

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む