RailsTweet以前にこういう記事を書きました。patorash.hatenablog.comしかし、PostgreSQLではセグメンテーション違反は起きなくなったのですが、Redisに接続する箇所で起きるようになったので、抜本的な問題解決にはなりませんでした。いうことで、私の中でMacでRailsアプリ開発は厳しい、という結論に。しょうがないので、Rubyの実行環境自体をMacからDockerにしていこうと思います。RubyTweet少し前に、Railsを起動するとセグメンテーション違反が起きたが、原因がわかった的な記事を書いてた。patorash.hatenablog.comこれで落ち着いたかと思いきや、全然落ち着いておらず、またもやセグメンテーション違反が起きた。シングルプロセスでアクセスする場合は落ち着いていた感じだったのだが、Resque等のバックグラウンド処理用のワーカープロセスを起動すると、落ちまくった。localを実行すると、ほぼセグメンテーション違反が起きた。周囲に聞いてみても、落ちないですけどねーと言われるので、そのプロジェクトのGemfileを見てみたら、pgのバージョンが0.21.0だった。今は1.2.2が最新である。当初は「いやいや、もう1系出てるのに未だに0.21.0て...。localを実行したところ、セグメンテーション違反が全く起きない...。ダウングレードして様子見しようかと思う。いえ、これでいいとは思っていないので、時々アップグレードしながら探ってみようかと思う。Secrets(secrets.yml.encを使う方式)を使っていて、5.2になって導入されたCredentials方式の導入は見送っていました。理由は、5.2のCredentials方式だと、各環境毎の設定が行えなかったからです。そのため、5.2のリリース後にはCredentialsを複数の環境で扱えるようにするためのgemがいくつか出てきました。Secretsを使い続けていました。6エンジニア養成読本で読みました。単行本これを使えるようにしたいのですが、いきなり6にアップグレードすることは難しいです。そこで、まずこの機能を先に取り込めるかどうかを検証しようと思いました。調べ始めてちょっとしたら、gistで希望通りのコードと思われるものが公開されていました。6のCredentialsと同様に各環境用のcredentials.yml.encとmaster.keyが作られました。導入に関しては、上記のgistを参考にしてください。6のCredentialsの作成と同様の手順で行えます。下記のコマンドを実行すると、config/credentials/staging.yml.encとconfig/credentials/staging.keyが生成された後、VSCodeでstaging用のCredentialsの設定ファイルが開きます。--environment=staging適当に入力後に保存して、そのファイルのタブを閉じると、設定完了です。Secretsの頃は設定項目を見るだけのコマンドがなかったので、わざわざ編集モードで開く必要があったのですが(変更なしでも変更と見なされるのでgitで戻す必要があった)、Credentialsならば、閲覧用のコマンドがあります。--environment=stagingCredentialsに移行するために行なった作業ざっくりとした手順は、以下の通りです。secrets.yml.keyをコピーしてmaster.keyを作る。secrets.yml.encから各環境用に値をコピーする。Rails.application.secretsをRails.application.credentialsに一斉置換する。secrets.yml.keyを削除する。master.keyを作るmaster.keyには、本番環境で設定されている環境変数RAILS_MASTER_KEYと同じ値を設定します。これはsecrets.yml.keyと同様のはずですので、コピーしてしまいます。config/master.keyまた、忘れずに.gitignoreにmaster.keyを追加しておきましょう。Secretsを表示します。Secretsの頃は、yamlのrootに環境名を設定する必要がありました。bar_stagingこれを、各環境のCredentialsにコピーしていきます。production環境まず、production環境です。以下のコマンドを実行すると、config/credentials.yml.encが生成され、編集モードで開きます。credentials:edit以下のように設定し、保存します。次に、staging環境です。以下のコマンドを実行すると、config/credentials/staging.yml.encとconfig.credentials/staging.keyが生成され、編集モードで開きます。--environment=staging以下のように設定し、保存します。bar_stagingこんな感じで環境の数だけ作っていきます。test用のCredentialsも作成しました。secrets.ymlに設定していた内容をコピーします。--environment=developmenttest環境も同様に行いました。機密情報の参照先を一斉置換するCredentialsは指定方法がRails.application.credentialsなので、Rails.application.secretsをRails.application.credentialsに一斉置換します。Secretsを使っていた環境で、以下の行を削除します。trueそして、環境変数RAILS_MASTER_KEY、又はmaster.keyに該当するものを必須とする設定を行います。true開発環境で動作検証を行うここまでできれば、設定が間違っていないか動作検証を行います。sアプリが起動することと、ある程度動作することを確認します。staging環境のRAILS_MASTER_KEYを変更する先に、staging環境の環境変数RAILS_MASTER_KEYを、config/credentials/staging.keyの値に変更します。うちではHerokuを使っているので、この設定を先にせずにコードをデプロイして検証しようとしたところ、RAILS_MASTER_KEYの値が異なるためCredentialsが解読できずにデプロイが失敗しました。忘れずにデプロイ前に変更しましょう。stagingにデプロイして動作検証を行うここまでできれば、stagingにデプロイできていると思いますので、動作検証をします。secrets.yml.keyを削除しましょう。これで、あとは本番環境にデプロイすれば大丈夫だと思います。思いきや...落とし穴(RAILS_MASTER_KEYがなくてCIがコケた)secrets.ymlを削除したことで、CIでコケていました...。うちではCircleCIを使っているので、CircleCIにて、環境変数RAILS_MASTER_KEYを作ってconfig/credentials/test.keyの値を設定したところ、テストも無事に通りました。PostgreSQLTweet過去に、こんな記事を書いていました。patorash.hatenablog.comずっと騙し騙し、gemの再インストールをしながら使っていたのですが、いよいよresqueがまともに動かないときが頻発したので、ちゃんと調査を開始。ちなみにこの記事を書いている時点での私のPCの環境は以下の通り。Overflowの投稿を発見。disable)をdatabase.ymlのdevelopmentとtestに追加したらいい、とあった。12から追加されたオプションらしい。Xだとこれの指定がないとエラーになることがあるとか...。設定はしておいたが、PostgreSQLへの接続はうまくいくときといかない時があったので、設定して様子見をしておく...。localコマンドでpumaとresqueを起動させたところ、ActiveJobの処理が動いたらセグメンテーション違反が発生。今度はエラーメッセージが変わった。/Users/****/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/redis-4.1.3/lib/redis/connection/ruby.rb:210今度はRedisに接続できなくなっている...。エラーメッセージでググったら、Rubyのバグレポートを発見。Issueになっていて、RubyじゃなくてMacのgetaddrinfoのバグのせいらしいことを把握。Xのgetaddrinfo由来のバグである、というバグレポートがヒットする。bugs.ruby-lang.org直す方法が掲示されていないのだが、RubyやGemをコンパイルする時点でバグっていそうだなと思った。upgradeを実行。2.6.3を実行(ここは任意のバージョンを)gemを全て再インストールすれば(略)と思い、全てのgemを削除。gemを全削除するのはここを参考にした。pumaとresqueを起動させて、ActiveJobの処理を動かしてみたところ、問題なく動いた。2をインストールしてみたのでその備忘録を記します。2のイメージをダウンロードします。ダウンロード方法はAWSのページに書いてありますが、色々な仮想化プラットフォームの形式で公開されています。https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html#amazon-linux-2-virtual-machine-prepare今回は、Hyper-Vのイメージをダウンロードしました。起動ディスクを作成する次に、seed.isoを作ります。2が起動したときに自動で設定される項目を定義しておくisoイメージになります。作り方は先ほどのAWSのサイトに書いてありますが、ここにも書いておきます。した手順は以下の通り。seedconfigという名前のディレクトリを作成し、そこに移動meta-data設定ファイルを作成するuser-data設定ファイルを作成するコマンドでseed.isoファイルを作成するmeta-dataの設定を行うmeta-dataは、ネットワークの設定を記入します。Hyper-Vで動かす場合は、仮想スイッチと同じネットワーク上に作らないといけないので、仮想スイッチのネットワークを調べましょう。ネットワークの設定を調べる仮想スイッチのネットワークですが、コントロールパネルのネットワークとインターネット、ネットワーク接続で確認することができます。今回は、前に作ったVagrantで利用するために固定IPを設定した仮想スイッチのネットワークを使います。SwitchのネットワークはPCが再起動するたびにコロコロ変わっていたので、とりあえず今回は使いません。なんか固定する方法もあるらしいけれど。矢印の仮想ネットワーク上で右クリックをして、プロパティを表示します。4を選択して、プロパティを表示。固定IPが振ってありました。192.168.100.1/24にしていることが、これで確認できました。DNS設定が抜けていたので、後で家のルーターのIPアドレスを指定しておきました。ここは各自のネットワークに合わせてください。meta-dataを記入するlocal-hostnameは適当に。私の場合はPostgreSQLの勉強用で作ろうとしていたので、postgres.primaryにしました。network-interfacesは、先ほど確認した仮想スイッチと同じネットワークである192.168.100.0/24に属するように書きます。/24はサブネットマスクのことで、255.255.255.0と同義です。gatewayに先ほどの仮想スイッチのIPを指定します。addressに、192.168.100.10を設定しました。192.168.100.1user-dataの設定を行う次に、user-dataを設定します。これはAWSのほうで書かれていた通りに。defaultにしておくと、ec2-userが作られます。個別にユーザーを作成したい人は、usersのところで新しくユーザ名を追記すればいいかと思います。パスワードは自分で設定してください。ローカル環境なので、Cloud-initが1度しか実行されないようにしておきました。disabledseed.isoファイルの生成WSL経由で、seed.isoファイルを生成します。WSLにUbuntuを入れてあるので、そちらからコマンドを入力しました。seedconfigディレクトリに移動後、次のコマンドを実行します。meta-dataこれで、seed.isoイメージができました。VMを作成するここからがAWSのサイトに書かれていなくて困ったところです。disks)に移動させました。先ほど作ったseed.isoファイルも同様に移動させました。これは必要なことではありませんが、VMのイメージがどこにあるのかわかりやすくするためです。次に、Hyper-Vマネージャを起動します。検索から探すとすぐに見つかります。仮想マシンの新規作成を選びます。ウィザードが出てくるので、名前はお好きなものを。世代の指定ですが、第1世代を選びます。これは、AWSで公開されているHyper-Vのイメージが第1世代だからです。メモリの割り当ては適当に。私は1024MBにしました。ネットワークの構成は、先ほど参照した仮想スイッチを指定します。仮想ハードディスクの接続は、最初にダウンロードしたHyper-Vのイメージを指定します。「既存の仮想ハードディスクを使用する」を選択し、さきほど移動させたHyper-Vのイメージを指定しましょう。あとは、確認して、完了を押してウィザードを終了します。次に、作成した仮想マシンのブート設定を行います。これは、先ほど作成したseed.isoファイル経由で起動させるための設定です。先ほど作った仮想マシンを選択し、右クリックして設定を選びます。次に、IDEコントローラーを選択し、メディアにイメージファイルを指定し、先ほど作ったseed.isoを設定します。設定が終わったらOKを押します。仮想環境を起動するでは、起動してみましょう。2上で右クリックして起動を選択します。その後、接続を選択します。ecs-userでログインするところまで確認できました。updateを実行してみたところ、アップデートパッケージも取得できたので、ネットワークの設定もOKなようです。2を試せる環境ができました。ネットワーク経由で接続できません。Hyper-Vの接続を使うのは表示も小さいし面倒過ぎます。SSHできるようにしましょう。2のことをVMと書きます。SSHで接続できるように設定する一時的にパスワード認証を許可まず、VM上でsshd_configを編集して、一時的にパスワード認証を許可します。これは、ホストOSとゲストOSでクリップボードが共有できないため、公開鍵を追加するのが困難だったためです。/etc/ssh/sshd_configで編集します。コマンドモードで、/Passwordと打ってEnterを押すと、該当の箇所が検索できるでしょう。yesこれで保存し、sshdを再起動します。sshd.serviceSSHでパスワードで接続できるようになりました。Windows側でSSHの設定を追加する公開鍵・秘密鍵の作成PowerShellで、以下の通りに入力します。~/.ssh/id_ecdsa.pubが出来上がります。公開鍵をVMに設定するPowerShellからSSHでVMに接続します。コピー&ペーストしてください。終わったら、SSHを切ります。SSHのConfigを設定するWindowsからVMにホスト名で接続できるようにするため、設定しておきます。ここで、ユーザ名と秘密鍵の指定を行います。vm_al2_primaryとしました。ここはお好きにどうぞ。FATAL公開鍵接続できるかチェックでは、試します。vm_al2_primaryこれで、接続できたらOKです。パスワード認証を無効にする先ほどと逆のことを行います。/etc/ssh/sshd_configで編集します。コマンドモードで、/Passwordと打ってEnterを押すと、該当の箇所が検索できるでしょう。yesこれで保存し、sshdを再起動します。sshd.serviceパスワードで認証できないことを確認するPowerShellで、SSHを試してみます。ec2-user@192.168.100.10接続拒否されたら、OKです。2を使えるようにするまでを書きました。Hyper-Vだとなかなか情報が見つかりにくい印象がありますが、これで勉強が捗りそうです。2を入れるTweet広告を非表示にするもっと読むコメントを書く2019-12-312019年を振り返る日記Tweet年が変わる前に振り返りをしておこうと思う。今年は育児休暇が終わって復職してから、様々なことに取り組んだ。技術的な取り組みはそんなに尖ったものはなかったが、GraphQLとOAuth2の勉強やgemを使った実装をやったりなど。私はマネージャーではないので、中間的な役割がいると思い、開発部全体の垣根をなくしていくための企画をいくつか提案し、実施した。希望者が技術を業務時間に学べる場を作った業務時間後に有志で読書会を開いた金曜のお昼は有志で食べに行くようにした若者のキャリアを考える会を開いた自己紹介発表会を開催した会話が少ないことが課題だと思っていたので会話を増やすための施策を行った。昔よりは話しやすい雰囲気にはなったのではないかと思う。自己紹介発表会はよかった。若者は自己紹介をする機会が多いが、古参社員や中途社員はチーム外にはなかなか経歴を話す機会がない。面白かったという感想を多くいただいた。あとは、まぁここに書くことでもないが、色々と取り組んだ。課題は山ほどあるが...。登壇は、年末には合同勉強会で発表した。それくらいだろうか...。あ、RubyKaigiのドリンクアップでLTした。騒がしすぎて全然聞いてもらえなかった気がする...。反省点としては、もう本当にたくさんある。仕事と家庭のバランスはどうかとか、後輩との接し方はこのままでいいのか?とか、OJTのプランこのままでいいのか?とか、体調管理とか、勉強量とか、インプット、アウトプットの量はどうかとか、ずっと悩んでいる。それを踏まえて、来年の目標は来年になったら考える。2019の7日目です。子供が生まれてから、子供が遊べる公園・施設に行くことが増えているので、今回はそれをまとめてみようかなと思います。順番は、思い出した順です。サウスヴィレッジ農作物の販売や、週末にフリーマーケットがあったり、遊べる公園があったりと楽しめるところです。芝生の広場はめちゃくちゃ広いので走り回らせられてGood。ファミリーやカップルのみならず、友達同士でバドミントンしてる人たちとかもよくいます。あと、撮影スポットとしてもいいのか、コスプレ撮影している人たちを見かけることもあります。マーケットでは、お弁当も売っているので、よくここでご飯を食べた後に遊ばせたりします。www.southvillage.jp灘崎総合公園サウスヴィレッジの近くにある公園です。ここも広いし遊具が充実しています。うちの子たちくらいの年齢だとやや早いかな...という感じ。人気の高いところで、家族連れが大勢います。www.okayama-park.or.jp深山公園(玉野市)玉野市になりますが、ドライブがてら、よく行く公園です。道の駅と併設されており、ここも野菜・魚介類の販売があります。公園は、ここも遊具が充実していて、結構ボロボロなのもあるのですが、ここ最近で滑り台付きの遊具が新設されました。これが小さい子でも滑られるものと、大きい子が楽しめる大きな滑り台があり、すごくいいです。ここも芝生の広場が広いので、やや安心です。それにしてもウェブサイトが20世紀か!!というくらいのやつで驚きました。アクセスカウンターがあった...。岡山空港の近くにあるスポーツ公園です。スポーツ公園なので、野球場とかテニスコートがあり、奥のほうに子供の広場があります。子供の広場は、小さな子供でも楽しめる遊具があります。ここも芝生なので安心。ここをオススメするポイントは、噴水と池があるところです。夏場は子供達が水着で池に入って遊びまくっています。そのため、着替えは必須!今年はうちの子達も池と噴水で遊びました。冬場に行くと、まだまだ幼い子供達は冬にも関わらず池に行こうとするので危険です。あと、空港の近くなので、飛行機の離着陸を見ることができます。子供が見ても大人が見ても楽しいものです。www.okayama-tbox.jpモンキーパーク東区にある公園です。みどりの広場という名前らしいですが、遊具に猿のマスコットが描かれているため、モンキーパークという愛称になっているとか。ここは最近よく行くところで、駐車場の真横に公園があるので移動が楽、かつ、トイレがちゃんとあるのがいいです。滑り台、シーソー、ブランコ、ジャングルジム、ターザンロープなどがありますが、基本的には中央にある滑り台付きの遊具が人気です。緩やかなローラー滑り台があり、これは小さな子供を滑らせても安心です。あと、コンクリートの滑り台。スピードが出て、時々子供が飛びすぎて泣いてたりします。普通に滑ればそこまででもないんですが。www.o-asobiba.com西大寺緑化公園これも東区のほうにある公園です。街中にあり、買い物施設が近所にたくさんあるので便利そう。遊具は多少あるかな~というくらいです。大きな遊具はあるけれど、小学生向けかなと思います。中央に図書館があるのですが、そこに布絵本がたくさんありました。幼児を連れて図書館にいくと、子供が本を破ってしまうのではないか?という不安が常に付きまとうのですが、布絵本なら破れないので安心です。子供向けの絵本の読み聞かせもやってました。散策用に川のある森があるのですが、こちらは川に子供達が入ろうとして止めるのが大変です。岡山総合グラウンドや岡山大学から近いところにある、こどもの森です。ここも噴水と池があり、夏場には水着と着替えが必須!ちょっと足場がゴツゴツしていますが、子供達は楽しそうでした。幼児向けの遊具も充実しており、かなり遊ばせることができます。街中なので駐車場と道が狭く、人気スポットなので駐車場がすぐに埋まります。行くなら早めか、ピーク時間をずらす等したほうがいいでしょう。児島のほうにある公園です。遊具がかなり充実しており、おすすめのスポットです。トイレも公園の横にあり、ちゃんと管理されているので綺麗めです。斜面を使ったアスレチック的な遊具があるのですが、うちの子達にはまだ早い...。www.o-asobiba.com玉島みなと公園ここはたまたまで1回しか行ったことないのですが、遊具が充実していたのを覚えています。人気スポットのようで人がいっぱいでした。www.city.kurashiki.okayama.jp玉島の森ここもたまたまドライブがてらで1回行きました。人がいなかったのでゆっくりと遊ばせることができたな~という記憶があります。スポーツ公園のため、テニスをしている人たちが多かったです。山の上のほうにあり、子供を遊ばせるための遊具はほぼないので、子供を遊ばせるという目的では行かないほうがいいでしょう。古い遊具が多く、事故を防ぐためだと思いますが、使えないように固定されてました(地球儀とか)。円通寺というだけあって、お寺の近くなのですが、ここの休憩所で、玉島みなと公園を教えてもらいました。www.city.kurashiki.okayama.jp酒津公園イオンモール倉敷の裏にある公園です。ここは遊具も充実しているし、水場もあるしで遊ばせやすいところです。www.city.kurashiki.okayama.jpハイランドマウンテン高梁市にある超大型遊具です。斜面に迷路のようにずっと遊具が続いていて、楽しい作りになっています。斜面を下っていくので、帰るときに上るのが大変ではあります。ここも1度しか行ったことがないのですが、そのときに長男が遊び始めるまさにその時に、斜面でコケて擦りむいてしまって一気にテンションが落ちてしまい十分に楽しめなかったので、もうちょっと成長してからリベンジしたいところです。takahasikanko.or.jp終わりにもう何か所かあったように思うのですが、思い出せたのがこれくらいでした。定番で行ってるのはサウスヴィレッジと深山公園くらいで、あとは時々って感じです。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。