【Docker】railsコンテナでbundle installしているのにCould not find gemと出る
どうもてぃです。
既存プロジェクトをdocker-composeで構成作るということで結構苦労してます。
いくつかトラブルがあったんですが、その中でも題にあるエラーで苦しみました。
環境
- Docker version 18.09.7, build 2d0083d
- docker-compose version 1.25.4, build unknown
- rails 5.2.0
試したこと
以前も同じようなエラーが出たのでvolume関係で怒られているんだろうなと、検討をつけて対処しようとしました。
参考にしていたのがこちらの記事。
最後の対応にあったvolumeを削除するパターンを試しました。
volumeを一回削除し再度作成することによって、volumeの中身を/usr/local/bundleと同じにする
こちらですね。
僕が作成したプロジェクトではskip bundle
は行っていなかったですし、bundle install
も試していましたので、最後の頼みの綱、すがる思いで試してみました。
が、駄目でした。
同じBundler::GemNotFound: Could not find gem
です。謎…
1から手順を見直す
手順を見直したとき、docker-composeを使ってrails newを行っていなかったことを思い出しました。
つまり、Dockerfileから先にimageを作成して、そのイメージを元にrails newしたということです。
で、 docker-compose build
した際に、先に作成したimageを指定してbuildしていなかったので、Gemfileで差が出た…と。
馬鹿じゃん自分。
解決策
めっちゃ簡単。
Gemfile.lock
を削除してビルドし直すだけ。
$ rm Gemfile.lock; touch Gemfile.lock $ docker-compose run <コンテナ名> bundle install
しょうもないことに1時間ほど費やしてしまいました。
もう二度と同じ轍を踏まないです。
ここに誓います。
追記(2021/01/27)
docker-compose.yml関連で一点ハマったので。
version: '3' services: postgres: image: postgres:10-alpine container_name: postgres volumes: - postgres-data:/var/lib/postgresql/data - ./docker/init/db:/docker-entrypoint-initdb.d ports: - '5555:5432' redis: image: redis:alpine container_name: redis ports: - '6379:6379' volumes: - redis-cache:/var/lib/redis/data web: build: . image: app command: bash -c 'rm -f tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0 -p 3000' container_name: app ports: - '3000:3000' volumes: - .:/myapp:cached - /myapp/log - /myapp/.git - /myapp/tmp - /myapp/node_modules - /myapp/vendor # <- こいついらん - bundle:/usr/local/bundle tty: true stdin_open: true depends_on: - postgres - redis worker: build: . image: worker command: bundle exec sidekiq -C config/sidekiq.yml container_name: worker volumes: - .:/myapp depends_on: - postgres - redis volumes: bundle: driver: local postgres-data: driver: local redis-cache: driver: local
vendor配下に設置していると、bundle installしても更新されません。
要注意。
【Vim】Vim歴三年目に突入するので、やっと操作系を覚える
どうもてぃ。
dein.vimの.vimrc
読み込まれない問題は解決(?)したのですが、それはまたの機会に書くとして、流石にvim操作をきちんと抑えておこうと思い、この記事を書くにあたりました。
知らないもの、便利なものめっちゃあってビビりました。
今更感半端ないですが、メモ・備忘録として残して毎日見るようにしたいと思います。
中身削除系
括弧のどの位置でも適応可能。
<>
, {}
, []
, ''
, ""
も同様に削除できる。
以下同じ仕様
コマンド | 動作 |
---|---|
di( または di) | 括弧内削除 |
da( または da) | 括弧ごと削除 |
yi( または yi) | 括弧内をヤンク |
ya( または ya) | 括弧ごとヤンク |
vi( または vi) | 括弧内選択 |
va( または va) | 括弧ごと選択 |
ci( または ci) | 括弧内を削除してインサートモード |
ca( または ca) | 括弧ごと削除してインサートモード |
htmlタグ
コマンド | 動作 |
---|---|
cit | タブの中身を消去してインサートモード |
vit | タブの中身を選択 |
dit | タブの中身を削除 |
yit | タブの中身をヤンク |
カーソル単語系
コマンド | 動作 |
---|---|
viw | カーソル上の単語を選択 |
diw | カーソル上の単語を消去 |
yiw | カーソル上の単語をヤンク |
ciw | カーソル上の単語を削除してインサートモード |
カーソルから特定位置
コマンド | 動作 |
---|---|
dt) | カーソル位置から閉じ括弧まで削除 |
ct) | カーソル位置から閉じ括弧まで削除してインサートモード |
vt) | カーソル位置から閉じ括弧まで選択 |
yt) | カーソル位置から閉じ括弧までヤンク |
dT( | カーソル位置から括弧まで削除 |
cT( | カーソル位置から括弧まで削除してインサートモード |
vT( | カーソル位置から括弧まで選択 |
yT( | カーソル位置から括弧までヤンク |
終わり
随時更新
毎日見るぞい
【Vim】vimproc plugin is not installed.
どうもてぃです。
絶賛.vimrcが読み込まれず困っています。
先日vim-jpのslackの皆さんにも質問し解決に至らず、結局プラグインのクリーンインストール、およびvimの再ビルドを行った際にタイトルのエラーで躓いたので解決策をば。
環境
- Linux Mint 19.3 Cinnamon
プラグインのクリーンインストール
$ sudo rm -rf ~/.cache/dein/* $ cd ~/.cache/dein $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh $ sh ./installer.sh ~/.cache/dein
dein.vimも再インストールします。
Unite.vimでgrep
自分の場合 <leader>g
にunite grepを割り当ててます。
更にunite grepの際、The Silver Searcher(ag)が動くようにも設定してます、爆速です。
unite grepを動かすと、 vimproc plugin is not installed
が出て、grep結果が出てこない。
本家を確認
~/.vim/bundle/vimproc.vim
配下にcloneしてmakeしろとのこと。
ただ、自分は ~/.cache/
にdein.vimでプラグインを管理しているので、 ~/.cache/dein/repos/github.com/Shougo/vimproc.vim
でmakeしてあげます。
make
~ % cd ~/.cache/dein/repos/github.com/Shougo/vimproc.vim ~/.cache/dein/repos/github.com/Shougo/vimproc.vim master* # <- 自分のpromptです % make make -f make_unix.mak make[1]: ディレクトリ '/home/motty/.cache/dein/repos/github.com/Shougo/vimproc.vim' に入ります cc -W -O2 -Wall -Wno-unused -Wno-unused-parameter -std=gnu99 -pedantic -shared -fPIC -o lib/vimproc_linux64.so src/proc.c -lutil make[1]: ディレクトリ '/home/motty/.cache/dein/repos/github.com/Shougo/vimproc.vim' から出ます
おわり
無事タイトルのエラーを解決できました。
調べても全然出てこなかったので結構困りました。
ただ、まだ.vimrcの読み込みがうまく行かない。。。
解決するまで :source ~/.vimrc
で一旦対応。
【Docker】Rails圧倒的環境構築
どうもてぃ。
新年初の記事ですが、昨年Docker Advent Calendarに参戦した記事の簡易版を書きたいと思います。
理由としては、Advent Calendarの内容はボリューミーすぎて、伝えたいことがまばらになってしまったためです。
今回はさくっといきます。
やりたいこと
スクリプト流したら環境構築完了
詳しい内容は以下のQiita記事へGo
Repository
やることは README.md
に全て書いてある。
Let's try
$ git clone https://github.com/motty93/docker-rails-postgresql.git $ cd docker-rails-postgresql/ $ sudo chmod 755 init.sh $ ./init.sh
これでRailsサーバーが立ち上がります。
自動で0.0.0.0:3000
のブラウザが開くはず。
おわり
めっちゃ簡単。
init.sh
の中身をみればだいたい何をやっているかわかるかとおもいます(ほとんどコマンドを羅列してるだけ)。
興味あれば是非リポジトリクローンして使ってください。
今後、rails6系のバージョンにも対応する予定ですので、是非Star押していただけると励みになります!
では今年もよろしくお願い致します。
【Vim】バージョン8へアプデするとエラーが出る
どうもてぃです。
最近フロント力を強化するためにReactを毎日少しずつ継続してやってます。
vimでやる場合にインデントが揃わなかったり、中括弧で警告っぽい表示になったりと、結構不便に感じることが多かったので、今回vim-prettierを導入することにしました。
その前準備として、vim8にバージョン上げたところ、突然エラーに陥ってしまったので解決策を備忘録として書いておきます。
環境
vim8へアプデ
ubuntuでアプデする方法は結構簡単でした。
$ sudo add-apt-repository ppa:jonathonf/vim $ sudo apt update $ sudo apt install vim
上記で問題なくいけるはず。
どんなファイルを開いてもエラー
vim8 function <SNR>63_append[6] ~~~~~~~neomru~~~~
やら E892 文字列を浮動少数点数として扱っています
と毎回出てくる。
流石に鬱陶しい。
いろいろ調べて見てたら、issueが上がってましたね。
neomru.vimのバージョンチェックを修正しないといけないっぽい。
issue通りに修正
対象のプラグインを修正します。
僕は .vim
をホームディレクトリに作っているので以下の手順で修正します。
$ cd .vim/dein/repos/github.com/Shougo/neomru.vim/autoload/ $ vim neomru.vim
vimで開いてノーマルモードで /str2float
と入力すると対象の修正箇所まで飛べると思います。
あとはissueの通りに修正を入れたらエラーが出ないようになります。
終わり
Docker Advent Calendar 2019 - Qiita
Docker Advent Calendar 18日目に参戦予定です。
どうぞよろしく。
【Rails】heroku containerをリリース時にアプリがクラッシュする
どうもてぃです。
一ヶ月ほど前に僕もパパになり、可愛い娘の寝顔を見ながら出勤する毎日を過ごしております。
天使すぎてホント癒やされる。
それはさておき、今回はherokuへコンテナデプロイした際に少しハマったので、同じ現象に悩まれてる方へ向けて記事を書きたいと思います。
heroku container
今回始めてheroku containerを使用してみたんですが、めちゃくちゃ簡単でした。
プロジェクトをDockerで作成しているなら是非やってみてください。
ただ、気をつけていないとハマる部分は割とあります。
以下デプロイ手順参考。
個人的にherokuとgoogleはリファレンスが最強だと思ってます。
そんなに難しい英語も書いてないですしね。
はまった現象
heroku containerのデプロイ時に気をつけないといけないのが、デプロイしたいコンテナ以外のコンテナが動いている場合は壊すか止めるかしないとアプリケーションクラッシュの原因になることです。
僕は開発が終わったら毎回コンテナを潰してるので、 docker ps -a
で出てきたものは全て削除してます。
総削除は以下のコマンド。
$ docker rm `docker ps -a -q`
最近はdockerのCUIも増えてきてるのでそれを使うのも有りかもですね。
ちょーっと重いですがvimライクに操作できるので以下を使ってます。
コンテナ削除後、デプロイ手順を踏んで普通にデプロイ。
$ heroku container:push web $ heroku container:release web
大抵はこれで上手く行きますが、アプリケーションを開いたところクラッシュしてました。
以下がログ(heroku logs --tail
)
2019-09-04T01:35:25.823858+00:00 heroku[web.1]: Starting process with command `rails server -b 0.0.0.0` 2019-09-04T01:35:31.697033+00:00 heroku[web.1]: State changed from starting to crashed 2019-09-04T01:35:31.606898+00:00 app[web.1]: A server is already running. Check /myapp/tmp/pids/server.pid. 2019-09-04T01:35:31.608944+00:00 app[web.1]: => Booting Puma 2019-09-04T01:35:31.608946+00:00 app[web.1]: => Rails 5.2.3 application starting in production 2019-09-04T01:35:31.608948+00:00 app[web.1]: => Run `rails server -h` for more startup options 2019-09-04T01:35:31.608949+00:00 app[web.1]: Exiting 2019-09-04T01:35:31.684704+00:00 heroku[web.1]: Process exited with status 1 2019-09-04T01:35:33.527454+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/robots.txt" host=line-bot.herokuapp.com request_id=f2475bec-d670-4f3b-9395-407e57a997c5 fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https 2019-09-04T01:35:34.134860+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=line-bot.herokuapp.com request_id=d61341cf-9cc6-4290-9ece-55689779e7ef fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https 2019-09-04T01:37:22.870909+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=line-bot.herokuapp.com request_id=9deb4679-3509-4dbd-bd45-3722609ec387 fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https 2019-09-04T01:37:25.542657+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=line-bot.herokuapp.com request_id=72fa644f-8a98-4e96-a20b-82e01de4b659 fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https 2019-09-04T01:37:28.998503+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=line-bot.herokuapp.com request_id=dd9d8c5e-7f57-4adf-816a-e68782ca8b83 fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https 2019-09-04T01:37:29.463016+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=line-bot.herokuapp.com request_id=b0201b8e-efad-41f6-890c-42c4726c3922 fwd="103.5.142.233" dyno= connect= service= status=503 bytes= protocol=https
マイグレーションもやったし、DBもインスタンスも有料化してるし。。。
もしかしたらなんかエラーが出てるのにそのままデプロイしちゃったかも?とおもってローカルで確認してみたけどそんなこと全く無い。。。
原因不明でした。
よくあるエラーと同じだった
今回の問題はDockerじゃなくてもローカルでも起きる問題が、Dockerコンテナをデプロイしたがゆえに発生した問題でもありました。
どういうことかというと、ローカルで普通に開発している場合(Dockerの有無にかかわらず)、Railsサーバーを落とした際に何かの不具合で tmp/pids/server.pid
が残っていると Process exited with status 1
が発生して起動できないことがあります。
これがまさに今回の原因で、コンテナをデプロイする際に、ローカルプロジェクトに tmp/pids/server.pid
が残っていると一緒にherokuへデプロイされちゃうと。
エラーメッセージがまさにそれを物語っていて
2019-09-04T01:35:25.823858+00:00 heroku[web.1]: Starting process with command `rails server -b 0.0.0.0` 2019-09-04T01:35:31.697033+00:00 heroku[web.1]: State changed from starting to crashed 2019-09-04T01:35:31.606898+00:00 app[web.1]: A server is already running. Check /myapp/tmp/pids/server.pid. 2019-09-04T01:35:31.608944+00:00 app[web.1]: => Booting Puma 2019-09-04T01:35:31.608946+00:00 app[web.1]: => Rails 5.2.3 application starting in production 2019-09-04T01:35:31.608948+00:00 app[web.1]: => Run `rails server -h` for more startup options 2019-09-04T01:35:31.608949+00:00 app[web.1]: Exiting 2019-09-04T01:35:31.684704+00:00 heroku[web.1]: Process exited with status 1
A server is already running. Check /myapp/tmp/pids/server.pid. で、デプロイはできているけど、processが既にあるんすわ〜ってherokuが認識してしまっていたということですね。
解決策
とても簡単で
$ rm tmp/pids/server.pid
$ heroku container:push web
$ heroku container:release web
これで解決です。
はまるところはあるんですが、一度出来てしまえばcontainerデプロイの便利さはやめられないです。
【レビュー】ロウヤの170度リクライニングオフィスチェアを購入した
どうもてぃです。
このたび、リモートワークが増える可能性があるということで、作業環境の整備をするはじめの一歩として椅子を購入しました。
願わくばハーマンミラーのアーロンチェアを買いたかったんですが、如何せん高い。
でも、アーロンチェアは会社で使っていてちょっとだけ不満もあったので、その不満を満たすべく自分の要望にあった椅子を探し求めた結果、今回の椅子に決めました。
以前使っていた椅子
実家にいた時に買ったのがこれ。
結果から言うと安物買いの銭失いでした。なんでこんなにレビューが良いのか謎なんですよねぇ。
このタイプ(ハイバックっていうのかしら?)の椅子、僕には全く合わなかったです。
主な理由としては、背もたれ。一息するとき、フーッと、もたれかかっても、身体にフィットしないというか背中全体を支えてくれない。
あと、もたれたときに背もたれが後頭部の高さまであるので、髪の毛にワックスをつけてると気になって安易に背中をつけられない、リラックスできないんです。
挙句の果てには半年で接続部分がもげてしまい、背もたれを外さないといけない始末。
現在は無様な姿と成り果て、粗大ごみとして出す機会を毎回失っているので、仕方なくギター用の椅子として使用しています。
今回購入した椅子
こちらです。
今見たらクソたけぇ。
楽天のスーパーセールで安くなっていたのですが、セール時に買い損ね残念に思っていたところ、公式を見たらたまたまスーパーセールよりも安くなっており衝動的にポチりました。
セール時には17000円くらいで購入できたのはラッキーでしたね。
使用し始めて3ヶ月ほど経過したので、良い点・悪い点を書いていこうと思います。
良い点
その1:組み立てが割と簡単
パーツがいちいちデカイのが難点ですが、デカイ分組み立ては結構簡単でした。
所要時間15〜20分ほど。
レビューで30分ほどかかると書いてたので、想定内に収まってよかったです。
その2:身体にフィットする
フィットします。前の子よりも断然いいです。
メッシュを購入して、高反発なのにフィットする。すばらC。
僕は身長180cmと割と大きめで、ハイバック式が嫌いという性質をもっていますが、リクライニングを調整すると背筋も伸びて頭も後ろにつかないし身体が包まれる感じがするのはマジで神です。
マジで神。
その3:腰が痛くならない
これも前述の通り、身体にフィットするので腰が痛くなりません。
僕の弱点は腰なので、これを満たせているはかなり大きいです。
つーか、椅子で腰悪くするって本末転倒だわ。
その4:リクライニング最高
仕事中に詰まったりちょっと休憩するときに、フルリクライニングできるのはマジで良い。
レビューにはありましたが、「この椅子に座ると眠くなる」はあながち間違ってないかも。
ただ、僕は仕事用に使ってるのでいまのところその兆候はないです。
フットレストもあって寝心地も割といい。でも、寝る用途として買ったわけではないので気をつけないとですね。
悪い点
その1:デカい
良い点でも上げてますが、デカいです。
僕は男性なので問題ないですが、女性だと一人で組み立てるのに苦労しそう。
あと、引っ越しの時割と面倒臭いかもしれないですねぇ。。。
その時はもっと稼いで、売り払ってアーロンチェア買おうかな。
その2:油臭い
新品あるあるなのかな?
到着してダンボールを開いた時に油臭く、組立後も一週間ほど油臭かったです。
組み立てるときにも思いましたが、接続部の部品(フットレストや足)に結構油がついてました。
仕方ないんですけどね。。。組み立て時にはちゃんと軍手をした方がいいです。
組立て終わった後にアルコール除菌シートで拭いてまわっても一週間前後は臭いが残ったので要注意です。
その3:各部品の品質が良くない
セール時の在庫処分的な商品だからかなーと思ったりしました。
品質については以下
- 座る部品のメッシュがちょっと破けてた
- ネジが合わず回すのに結構力が必要だった
- 左右で接続部の位置が違ったりする
- フットレストを出し入れするとき、何かに引っかかったりしてコツがいる
いまのところ気になるのはこれくらい。
上3つは時間も経ったのでもう気にしていないです。
ただ、フットレストは困りますね。毎回スムーズに出てこない。
しかも、出し入れの音がうるさい。
さらに、金属部分を触ると油が手に付く。
そんな頻繁にリクライニングして寝転がるわけではないので、いまのところ目をつむってます。
次買う椅子では必ず見るように気をつけたいです。。。
その4:フットレストうるさい
前述通りです。
出し入れがうるさいので、これは品質の問題。。。
次買う椅子では以下略
総評
以上、良い点・悪い点あげてみました。
前の椅子がひどすぎたのもあり、最低限要件が満たされている今回の椅子には総じて今のところ満足してます。
いや、その椅子はマジカスだよ、こっちのが絶対おすすめだよって人がいたら是非とも教えてください。
その時はあなたのアフィリンクを踏ませてください。お願いします。