- 投稿日:2020-03-27T22:02:23+09:00
ツイッター風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接続でログインする
Terminal(ローカル)# ホームディレクトリ直下に.ssh/隠しディレクトリを事前に作ってます $ cd # 別に移動しなくても問題ないが、隠しディレクトリに入れといた方が無難 $ mv Downloads/****鍵の名前****.pem .ssh/ $ cd .ssh/ # ****鍵の名前****.pemのファイルに関して所有者のみ読み出し・書き込みの権限を与える意 # (所有者も実行権限がなく、所有者グループとその他はなんの権限もない) $ chmod 600 ****鍵の名前****.pem # ログイン $ ssh -i ****鍵の名前****.pem ec2-user@****ここはElasticIP****OutputAre you sure you want to continue connecting (yes/no)?
Terminal(ローカル)yes
OutputWarning: 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 から最後までまるまるコピーwebBrowserhttps://github.com/Terminal(EC2)$ ssh -T git@github.comOutputAre 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.rbapp_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 endconfig/environments/production.rb# 以下をコメントアウトする # config.assets.js_compressor = :uglifierconfig/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/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/environmentDATABASE_PASSWORD='***MySQLのパスワード***' SECRET_KEY_BASE='***先程コピーしたキー***'Terminal# 再ログイン $ exit $ ssh -i ****鍵の名前****.pem ec2-user@***ここはElasticIP*** #上の環境変数の確認は # env | grep SECRET_KEY_BASE # env | grep DATABASE_PASSWORDポート範囲が
3000
、ソースが0.0.0.0/0
で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 -DwebBrowserhttp://***ここはElasticIP***:3000以上でとりあえず、繋がるはずです。
ただ、非常に遅いですね。パワーアップして通常のアプリとして動作させるにはNginxが必要です。
マージをコマンド一つで本番環境まで反映させるにはCapistranoが必要です。
これらの導入は後編で。もし困ったら
①ログ確認
/var/www/***アプリ名***/log/unicorn.stderr.log
をtail
かcat
かless
かvim
あたりのコマンドで確認する。②unicornの再起動
Terminal(EC2)$ ps aux | grep unicorn $ kill ***ユニコーンのPID*** $ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
- 投稿日:2020-03-27T20:37:47+09:00
【ruby on rails】Rails超入門0❗️RailsをRailsInstallerでwindows10にインストール
0.Railsinstallerとの出会い
rails6.0インストール⇒失敗
rails5.0インストール⇒失敗
sqlite3とのバージョンが合わない、
webpackerのインストール、nodejsのインストール
・・・・・
何故かうまくいかないのだ。
環境ができないと試すこともできない。
そんな時に出会ったのがRailsInstallerだった。1.RailsInstallerのダウンロードとインストール
1.画面に従ってインストールする。
ここから欲しいバージョンのものをダウンロードをする。※railsinstaller:ruby on railsを構築する上で必要なソフトが入った
all in one packageのようなもの私はrailsinstaller-3.4.0.exeを入手した。
2.コマンドプロンプトでruby.exeのあるフォルダに移動
c:\RailsInstaller>cd Ruby2.3.32.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.
Runbundle 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 thatgem 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.
Usebundle 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/
で下記の画面が出たら成功最後に
こうすると、楽にインストールできるよとか、
SQLiteだけでなく、他のdbも使えるとか教えて頂けると嬉しいです。
- 投稿日:2020-03-27T20:12:00+09:00
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環境」を初心者向けに解説は初心者の私にとってわかりやすかったです。
さらなるエラー箇所については、解決したら追記していきます。
- 投稿日:2020-03-27T16:18:24+09:00
関連する質問を表示したい(Q&Aサイト)
現在ポートフォリオとして大学受験をテーマにしたQ&Aサイトを作成しています
関連する質問を表示する機能の実装に手間取ったので、自分用にまとめ。
何をもって関連とするか
質問同士を関連づけるための基準が必要ですが、今回は質問にカテゴリーを紐付け、同じカテゴリーに属するものを関連する質問とします
モデル
models/question.rbhas_many :category_relationships has_many :categories, through: :category_relationships, source: :categorymodels/category_relationship.rbbelongs_to :question belongs_to :categorymodels/category.rbhas_many :category_relationships has_many :questions, through: :category_relationships, source: :question実装
実現したい動き
questionモデルのインスタンスメソッドとして、関連する質問を取得するrelated_questionsメソッドを追加します
- 特定の質問から、カテゴリーを取得
- そのカテゴリー毎の質問を取得
- 上記の操作で得た質問の配列を「関連する質問」とし、そのいくつかをランダムで表示する(今回は4つ)
- 質問の重複と、レシーバーとなる質問自身を含まないように配慮
このような形で実装していきたいと思います
1.特定の質問から、カテゴリーを取得
- CategoryRelationshipテーブルから、question_idがレシーバーと等しいレコードを取得
- そのレコードからカテゴリーを取得
- 上記の結果をrelated_categoriesという変数にいれる
可読性を考慮して、selfをつけておきます
models/question.rbdef related_questions related_categories = CategoryRelationship.where(question_id: self.id).map(&:category) end2.カテゴリー毎の質問を取得
- 質問を入れておくために、related_questionsというからの配列を定義
- related_categories内のカテゴリー一つ一つから、関連する質問を取得する
- その質問をrelated_questionsに入れていく
models/question.rbdef 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 # ここまで追加 endeachがネストしちゃってますが…とりあえず動くのでこのままで。
より良い方法を思いついたら追記します3.ランダムで取得
明示的にreturnをつけておきます
models/question.rbdef 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) # ここまで追加 end4.重複を避ける
このままでは複数のタグをつけている質問が重複して取得される可能性がありますね
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.rbdef 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) #この行に追記 end5.レシーバー自身を含めない
このままではrelated_questions内にレシーバー自身が含まれてます
related_questions.distinct.where.not(questions_id: self.id).sample(4)
的なことをしたいんですが、配列に対してwhereを使うと上と同じエラーが発生しますここは素直にif文を使っていきます
models/question.rbdef 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
こっちのコードについての意見も大歓迎です!(むしろこっちに対するレビューが欲しいです)読んでいただきありがとうございました!
- 投稿日:2020-03-27T14:40:16+09:00
【爆速成長!】プログラミング駆け出し〜オリジナルポートフォリオ作成までに参考にしたサイト一覧
はじめに
完全未経験の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/e60ab5bb01b90d927ae5CSSのクラス名を決めるときに使うリストをつくりました
https://qiita.com/manabuyasuda/items/dbb76ed36970bec95470Naming -名前付け-
https://qiita.com/Koki_jp/items/f3d3e824f98d182d4100コマンド関連
Macのターミナルコマンド一覧(基本編)
https://qiita.com/ryouzi/items/f9dee1540a04a0bfb9a3Linuxターミナルコマンド一覧(中級編)
https://qiita.com/ryouzi/items/73f63f09573b7b4e246cHTML関連
SEO対策として最低限押さえておきたいHTML/HTML5マークアップの大事な6つのポイント
https://creive.me/archives/8814HTMLの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.htmlBootstrapのグリッドシステムの使い方を初心者に向けておさらいする
http://websae.net/twitter-bootstrap-grid-system-21060224/Bootstrap4カラムの位置を調整【カラムのオフセット】
https://webnetamemo.com/coding/bootstrap4/201902227791Ruby/Rails関連
【Ruby/Ruby on Rails】重要用語・基礎知識まとめ【プログラミング学習開始128日目】
https://qiita.com/fuku_tech/items/4d2517ec5bbd53726997[Ruby] privateメソッドの本質とそれを理解するメリット
https://qiita.com/kidach1/items/055021ce42fe2a49fd66Railsのモデル検索あれこれ
https://qiita.com/tono0123/items/576a4a4659b51860f304【Rails】form_forの使い方を徹底解説!
https://pikawaka.com/rails/form_forbundler、bundle execについて ※自分用メモ
https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8rails generate migrationコマンドまとめ
https://qiita.com/zaru/items/cde2c46b6126867a1a64Railsバリデーションまとめ
https://qiita.com/h1kita/items/772b81a1cc066e67930eRailsのバリデーションエラーのメッセージの日本語化
https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b[Rails]不要になったmodelの削除方法
https://bokuranotameno.com/post-9880/Rails で includes して N+1 問題対策
https://qiita.com/hirotakasasaki/items/e0be0b3fd7b0eb350327Rails5.2から追加された credentials.yml.enc のキホン
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39git関連
Gitコマンド早見表
https://qiita.com/kohga/items/dccf135b0af395f69144君には1時間でGitについて知ってもらう(with VSCode)
https://qiita.com/jesus_isao/items/63557eba36819faa4ad9git commit を取り消して元に戻す方法、徹底まとめ
http://www-creators.com/archives/1116[Git] .gitignoreの仕様詳解
https://qiita.com/anqooqie/items/110957797b3d5280c44fGitHubで特定のファイルやフォルダを管理対象から除外する方法
https://fantastech.net/gitignoreDB関連
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-1897Devise関連
Devise+OmniAuthでユーザ認証を実装する手順
https://qiita.com/zenizh/items/94aec2d94a2b4e9a1d0b[Rails] deviseの使い方(rails5版)
https://qiita.com/cigalecigales/items/f4274088f20832252374【Rails】deviseの使い方を徹底解説!
https://pikawaka.com/rails/deviseRspec関連
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」
https://qiita.com/jnchito/items/42193d066bd61c740612Rails5でコントローラのテストをController specからRequest specに移行する
https://qiita.com/t2kojima/items/ad7a8ade9e7a99fb4384Solidus関連
Solidus - Productsまわりの概念まとめ
https://forest-valley17.hatenablog.com/entry/2018/10/10/094742docker関連
【図解】Dockerの全体像を理解する -前編-
https://qiita.com/etaroid/items/b1024c7d200a75b992fcDockerの基礎をまとめてみた ~ 第一章:コンテナ?Dockerとは?
https://qiita.com/supaiku2452/items/8b06b774c0e2fce7df92コンテナ開発の始め方
https://qiita.com/niisan-tokyo/items/bcb89c9de82ba465d200Docker、ボリューム(Volume)について真面目に調べた
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32docker-composeを使うと複数コンテナの管理が便利に
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fceいまさらだけどDockerに入門したので分かりやすくまとめてみた
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1docker-compose コマンドまとめ
https://qiita.com/wasanx25/items/d47caf37b79e855af95fRubocop関連
Railsの品質を上げるRuboCopとは?インストールや使い方を紹介!
https://kitsune.blog/rails-rubocopAWS関連
(下準備編)世界一丁寧な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/fcb81753eaf381b4b33cRailsアプリをAWS、unicorn、nginxで手動デプロイして独自ドメインを紐づけるまで
https://qiita.com/happytarou0228/items/3771b13217483c35965d最後に
個人的には、特にAWSや本番環境構築に大苦戦しました。
駆け出しエンジニアの皆さんに、少しでも役立てもらえたら幸いです。
- 投稿日:2020-03-27T14:38:19+09:00
ポートフォリオ公開
学習期間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
やったこと
- 3ヶ月間、毎日10時間はパソコンの画面を見つめました。(おかげで視力が悪くなったかも笑)
- スクールの友人とアウトプットをする(説明できないことは理解が足りていない)
- ひたすらググる。(ただググるだけではなく仮説を立ててからググる)
こうすればよかったこと
コピペは辞める。(理解してコピペならいいが思考停止でコピペは本当によくない。)
アプリを作ってみて
- 筋トレと一緒で頭を悩ましている(脳みそに負荷をかけている)時が一番成長している気がする。
- 最初は辛いけど徐々にできることが増えていき楽しくなってくる...はず笑
- あるあるだと思いますが、プログラミングを知らない人にアプリを見せてもあまり興味を持ってくれない(家族に見せてもへーくらいの感想しかもらえない。でもそれが本当のユーザーの反応なのである笑)
- まだまだ全然完成してないんですが、就活始めなきゃということで僕の実力ではここまででした。
3ヶ月間毎日少しずつでも学習すれば優秀なみなさんならもっといいものが作れると思います。これからプログラミングを始める方の参考になれば幸いです。
最後までみていただきありがとうございます!
もしソースコードを公開してほしいというリクエストがありましたらコメントよろしくお願いします!
- 投稿日:2020-03-27T14:38:19+09:00
学習期間3ヶ月の初学者がポートフォリオを公開してみる。
なぜ書いたか?
いつもと変わらぬ1日が始まり、なんとなしに携帯をいじっていると余命診断アプリなるものを見つけました。面白そうだなと思い、ダウンロードして余命を診断してみるとなんとあと51年しか生きられないというではありませんか。
人によってはあと51年もあると考えるのかもしれませんが、なんとなくあと70年くらいは生きられるとのほほんと考えていた私にとってこの51年というのはあまりに少ない。何か後世に残さなければということで筆を...じゃなくてキーボードを叩いているところでございます。
余命タイマーまた個人的にAWSの勉強をし始めたのですが、とっかかりにAWSの漫画を読んでいたところ「アウトプットしないのは知的な便秘」というフレーズから便秘は嫌だなーと思い急遽この記事を書いております。
最初の記事で何を書こうか迷ったのですが、いきなりすごい記事は書けないので、プログラミングスクールに3ヶ月通い、そこで得た知見と自己学習の成果を発表することで、今からプログラミングを学び始める方の参考になればいいなと思い書かせていただきます。
自己紹介
初めまして。いつもQiitaの記事にはお世話になっております。私の経歴からお話しさせていただくと、もともと消防士を4年ほどしていまして、今はエンジニア転職を目指す28歳です。
元々コンピューターには疎く仕事でもそれほどパソコンは触らないので、タッチタイピングもできない状態でmac?何それ美味しいの?あーポテト食べたくなってきた。という状態からのスタートでした。
本格的にプログラミングを学び始めたのは2019年の12月からです。これから様々なことにチャレンジしていけたらと思っています!
最近はひたすらプログラミングと英語に明け暮れる毎日です。はじめに
さっそくですがポートフォリオを実際に見てもらった方が早いと思うのでここに公開します。
またプログラミングにこれから触れる方向けに記事を書いておりますので用語の説明をなるべく噛み砕いてさせていただいてます。つよつよエンジニアのみなさん、間違っているところやお気づきの点がありましたらコメントしていただけるととても嬉しいです。
(就活中なのでサイトとgithubを公開するか迷ったんですが、つよつよエンジニアの方のアドバイスがもらえるかもしれないと考えたら機会損失になるのはもったいないと思い公開しました)アプリタイトル
first_skill_app
URL
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
やったこと
- 3ヶ月間、毎日10時間はパソコンの画面を見つめました。(おかげで視力が悪くなったかも笑)
- スクールの友人とアウトプットをする(説明できないことは理解が足りていない)
- ひたすらググる。(ただググるだけではなく仮説を立ててからググる)
こうすればよかったこと
コピペは辞める。(理解してコピペならいいが思考停止でコピペは本当によくない。)
アプリを作ってみて
- 筋トレと一緒で頭を悩ましている(脳みそに負荷をかけている)時が一番成長している気がする。
- 最初は辛いけど徐々にできることが増えていき楽しくなってくる...はず笑
- あるあるだと思いますが、プログラミングを知らない人にアプリを見せてもあまり興味を持ってくれない(家族に見せてもへーくらいの感想しかもらえない。でもそれが本当のユーザーの反応なのである笑)
- まだまだ全然完成してないんですが、就活始めなきゃということで僕の実力ではここまででした。(これからも修正やアップデートはしていくつもりです。)
3ヶ月間毎日少しずつでも学習すれば優秀なみなさんならもっといいものが作れると思います。これからプログラミングを始める方の参考になれば幸いです。
最後までみていただきありがとうございます!
- 投稿日:2020-03-27T14:19:10+09:00
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_profileruby-buildのインストール
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build $ cd ~/.rbenv/plugins/ruby-build $ sudo ./install.shrbenvの確認
$ 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=epelrbenvを使って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.0rubyを設定します。
$ 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.2DB(MySQL)をインストール
npmとnode.jsがしっかりとインストールされているか確認
$ npm -v 3.10.10 $ node -v v6.17.1mariaDBが入っている可能性があるので念のため削除
$ 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<<0327mysql> 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のインストール
$ bundleyarnをインストール
こちらを参考にさせていただきました。
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 -gwebpackerをインストール
bundle exec rails webpacker:installnodeのバージョンエラーになる場合はこちらを実行してまたwebpakerをインストール
$ sudo npm install -g n $ sudo n 9.11.2これでとりあえずrails serverは問題なく起動するようになりました。
ここからデータベースの設定をしていきます。あと少しですwdatabase.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/
- 投稿日:2020-03-27T11:45:59+09:00
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の再起動して終わり。以上です。
- 投稿日:2020-03-27T11:39:47+09:00
ActiveStorageのseedデータを投入する際のエラー
Railsでアプリを作成する際、ActiveStorageを使って画像のseedデータを投入しようとしたところ、少しはまったので備忘録です。
seedデータが通らない
記事などを参考に
seeds.rbuser = User.find(1) user.image.attach(io: File.open('app/assets/images/test.jpg'), filename: 'test.jpg')とした後、
$ rails db:seedとしても通らないので、ぐぐってみる。
config/environments/development.rbconfig.active_job.queue_adapter = :inlineを追記したら無事とおりました。
- 投稿日:2020-03-27T11:00:41+09:00
デプロイ時 よく使ったコマンドメモ 自分用
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 grepmysql
起動
sudo service mysqld startproduction環境でのDB削除
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop接続
mysql -h エンドポイント -P 3306 -u root -pDBの文字コードチェック
show variables like "chara%";nignx
再起動
sudo nginx -s reloadvimコマンド
強制書き込み
$ sudo vim <ファイル名>
:w !sudo tee %
:q!
- 投稿日:2020-03-27T06:45:14+09:00
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.rbp (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] trueRails 6.0.1 では
Rails 6.0.1 (以降) では、エラーになりません。
$ bin/rails runner scripts/endless_range.rb Running via Spring preloader in process 263 trueRails 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
参考情報