Rails4 と Rails5 とでの eager_load_paths の違い

Rails4 と Rails5 とで eager_load_paths の内容に差異があることを知 りました。 Rails5 では app 以下の全ての concerns ディレクトリや channels ディ レクトリが追加されています。 以下、Rails4 と Rails5 とで実装箇所を追ってみました。 Rails-4.2.10 eager_load_paths を返すメソッド Rails::Engine::Configuration#eager_load_paths ↓ eager_load_paths の構築開始。Rails5 と違いあり Rails::Engine::Configuration#paths ↓ Rails::Paths::Root#add ↓ Rails::Paths::Path#initialize ↓ Rails::Paths::Path#eager_load! ここまでで eager_load_paths の構築完了 ↓ Rails::Paths::Root#eager_load 結果を返す Rails-5.2.0 eager_load_paths を返すメソッド Rails::Engine::Configuration#eager_load_paths ↓ eager_load_paths の構築開始。Rails4 と違いあり Rails::Engine::Configuration#paths ↓ Rails::Paths::Root#add ↓ Rails::Paths::Path#initialize ↓ Rails::Paths::Path#eager_load! ここまでで eager_load_paths の構築完了 ↓ Rails::Paths::Root#eager_load 結果を返す まとめ Rails の eager_load_paths を調べました。app 以下が再帰的に追加され るだけかと思ってましたが、調べたら凝ったことをしていました。config 以下も追加されるのも、なるほど…といった感じでした。...

2018-05-26 (Sat) · masutaka

Rails リポジトリに CircleCI 2.0 を導入した

先日素振りがてら、個人の小さな Rails リポジトリを Dockerize しました。 https://github.com/masutaka/github-organization-watcher/pull/45 現在クローズドβの CircleCI 2.0 は Docker 前提らしいので、これも素 振りがてら移行してみました。 https://github.com/masutaka/github-organization-watcher/pull/48 CircleCI 2.0 はここから申請すれば、すぐ使えるようです。 https://circleci.com/beta-access/#request-access 移行前の印象 (1) 1.0 では宜しくやってくれたけど、2.0 は circle.yml に全部書く必 要があるみたい。面倒そう。 (2) とは言え、Dockerfile や docker-compose.yml があるし、ちょっと やれば動くだろう。 (3) Alpine Linux の Docker Image 使えば、1.0 よりは速くなるのかな。 移行後の感想 (1) 予想に違わない面倒くささ・・・! オートマがマニュアルになった感じ。 (2) 使えませんでした /(^o^)\ 参考にはなったけど。 (3) 速い・・・!!!(移行前: 01:38 、移行後: 00:30 ) 両方ともキャッシュあり状態です。Alpine Linux もそうかもしれないけ ど、とにかくキャッシュのリストアが速かったです(後述)。あと、 CircleCI のビルドが全体的に高速です。 circle.yml circle.yml は 1.0 から 2.0 に移行して、このようになりました。同じ ディレクトリにある Dockerfile や docker-compose....

2017-04-13 (Thu) · masutaka

DynamoDB で TTL が実装されたので、Rails4 から使ってみた

先日、ついに DynamoDB に TTL が実装されました。 新機能 – TTL(Time to Live)機能を利用したDynamoDBアイテムの管理について|Amazon Web Services ブログ 仕事では Rails4 のセッションストアに ElastiCache for Redis を使っ ているのですが、[2016-10-24-1] に書いたとおり、スケールが辛いです。 作業自体もそうですし、ElastiCache for Redis はスケールアップのみで スケールアウトが出来ません。CPU パワーじゃなくてストレージが欲しい のじゃ…。 DynamoDB はインスタンスの管理が不要なため、もし移行出来たらとって もうれしいです。お値段も ElastiCache よりずっと安そうです。 https://aws.amazon.com/jp/dynamodb/pricing/ いろんな期待を込めて、ちょっと触ってみました。 準備 こちらの記事を参考にして、Rails4 のセッションストアを DynamoDB に します。 Rails4 でセッションストアに DynamoDB を使う | Developers.IO 2013年11月05日と古めの記事ですが、現在も動くことを確認しました。 当時はまだ TTL が実装されていないので、 $ bundle exec rake db:sessions:cleanup で期限切れのデータを削除する方式です。 なぜか migration ファイルに拡張子 .rb が付かず、db:migrate で DynamoDB のテーブルが作られませんでした。適当にリネームして下さい。 DynamoDB に expired_at を追加 DynamoDB で expired_at フィールドを追加する修正をしてみました。...

2017-03-02 (Thu) · masutaka

yaml_vault が AWS での Rails 環境変数つらい問題を解決したと思う

※ 弊社 feedforce で毎週行っている、インフラ共有会を元にした記事で す。AWS で Rails を使っている方を想定していますが、数人規模のチー ムを意識した内容になっています。 こちらの記事で yaml_vault を知ったので、実際に試してみました。 yaml_vault+KMSでRailsアプリのconfig/secrets.ymlを暗号化してgitにコミットして管理する - Qiita 環境変数つらい SaaS の API Key などの秘匿情報をコードに埋め込まないために、Rails で dotenv を使っている方も多いかと思います。 しかし、README.md にあるように 作者の @bkeepers さんは production での利用は奨励していません。 dotenv was originally created to load configuration variables into `ENV` in *development*. There are typically better ways to manage configuration in production environments - such as `/etc/environment` managed by [[Puppet|https://github.com/puppetlabs/puppet]] or [[Chef|https://github.com/chef/chef]], `heroku config`, etc. とは言え、/etc/environment を Chef の Encrypted Data Bag 等で構成...

2016-11-05 (Sat) · masutaka

『パーフェクトRuby on Rails』のサンプルアプリにHerokuボタンを付けてみた

Herokuボタンがリリースされました。 Heroku|Introducing Heroku Button 詳しくはnaoyaさんの記事をどうぞ。 Deploy to Heroku / Webアプリケーションのポータビリティ再び - naoyaのはてなダイアリー ざっくり言うと、これだけでGitHubの任意のブランチをHerokuにデプロイ出来ます。 GitHubにHerokuで動くコードを置く 上記リポジトリのrootにapp.jsonを追加する README.mdにHerokuボタンを追加する もちろんHerokuアカウントは必要です。 試してみた 試しに[2014-07-10-1] で写経した、『パーフェクトRuby on Rails』の サンプルアプリにHerokuボタンを付けてみました。 デプロイすると、このような自動生成されたURLが割り当てられます。 http://blooming-reef-2288.herokuapp.com/ blooming-reef-2288の部分は自分で指定することも出来ます。 アプリケーションを実行するために環境変数やマイグレーションが必要で あれば、app.jsonに指定します。 https://github.com/masutaka/awesome-events/blob/master/app.json 任意のブランチもデプロイ出来る 特筆すべきは、任意のブランチをHerokuにデプロイ出来ることです。 以下のhogehogeブランチのHerokuボタンをクリックすると、左上のタイト ルがHogeHogeになります。 https://github.com/masutaka/awesome-events/tree/hogehoge CIにhookすれば、テストが成功したら自動でHerokuにデプロイも出来そう です。 今までは、他の開発者やテスターに動く環境を提供するためには、 Quipperのように 自力でなんとかする必要がありましたが、もうそんなこと ありません。これは本当にすごい!! privateリポジトリは未対応なようなので、仕事のリポジトリにはまだ使え ませんが…。 任意の場所にHerokuボタンを設置 こちらをクリックしてもデプロイすることが出来ます。 このようにGitHub以外に設置する場合は、URLパラメータを指定する必要が あります。 https://heroku.com/deploy?template=https://github.com/masutaka/awesome-events ブランチも指定できます。 https://heroku.com/deploy?template=https://github.com/masutaka/awesome-events/tree/hogehoge ヘルプ Herokuボタンについて詳しくはヘルプをどうぞ Creating a ‘Deploy to Heroku’ Button|Heroku Dev Center

2014-08-09 (Sat) · masutaka

『パーフェクトRuby on Rails』を全部読んで写経してHerokuにデプロイした

先月からRailsをガッツリ使うプロジェクトに入ったので、結構気合い入れて 読みましたよ。 Railsはそこそこ分かっているつもりですが、ネットの知識のみでまとまっ た学習をしたことがなかったので、タイミングの良い発売でうれしかった です。なんて運がよいのだろう。 『パーフェクト Ruby on Rails』と名乗るだけあって、基本的なことは網 羅していたと思います。後半はRackとかRailtieとかの濃い話題になって、 ちょっとしんどかったです。 まずはひととおり読んで気になったところを付箋。 次に6章を理解しながらひたすら写経。erbはタイプが辛かったのでhamlに 変換しながら。写経なんていつ依頼だろう?本だと前のコードとのdiffが 分からなかったのが辛かったです。 ransackは6章の著者、前島さんの記事 で知った程度で、使ったのは初めて です。簡単に検索フォーム作れてよいですね。 テストは普段から書いているので7章は写経しませんでしたが、 poltergeistが気になりました。capybara-webkit入れることあれば、 代わりに使ってみようかな。 せっかくなので、写経結果をHerokuにデプロイしました。誰でもイベント を登録できます。 http://masutaka-awesome-events.herokuapp.com/ 以下メモ。 $ heroku apps:create masutaka-awesome-events $ heroku addons:add heroku-postgresql --app masutaka-awesome-events $ heroku run rake db:migrate --app masutaka-awesome-events $ heroku restart --app masutaka-awesome-events $ heroku config:add TWITTER_CONSUMER_KEY=<TWITTER_CONSUMER_KEY> $ heroku config:add TWITTER_CONSUMER_SECRET=<TWITTER_CONSUMER_SECRET> P.S. 写経してからこの記事に気づきました…。後悔はしていない。 パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました - willnet.in

2014-07-10 (Thu) · masutaka

Railsでapp以下の変更をSpringが検知しない問題を解決した(?)

最近またSpring を使い始めたんですが、相変わらずモデルやコントローラ を変更してもSpringは検知しませんよね?みんなどうしているんだろう? files in the app directory are not being watched · Issue #115 · rails/spring このIssueによると、そもそもRailsのリロードはコストが高いため、 Springはリロードが必要ない設計にしているそう。 うーん、、、とは言ったものの実際問題、モデルのメソッドを修正した後 テストを走らせても、変なエラーが出て、手動でリロードさせると直ると いうことが多々あります。 ちなみに手動リロードはtouch config/application.rbでイケます。thx! loading... Zeus を使ってた頃はとても快適だったので、Zeusに戻る準備までし始めま したが、READMEのWatching files and directories やソースを読んで、 自動リロードさせる方法を見つけました。 config/spring.rbを作って、以下を書けばOKです。 Spring.watch 'app' 他にもwatchしたいディレクトリやファイルがあればこのように書きます。 Spring.watch 'app', 'lib' ◆適用前 $ bundle exec spring status Spring is running: 56071 spring server | awesome_events | started 25 secs ago 56072 spring app | awesome_events | started 25 secs ago | development mode $ touch app/models/user....

2014-07-06 (Sun) · masutaka

Railsセミナーに行ってきた #railssemi

【学生無料!】【Railsセミナー】Why choose Ruby on Rails ? : ATND 弊社フィードフォースの応援要員として、メンバーズ様主催のRailsセミナーに行ってきました。メモ程度ですが軽く記録しときます。 ◆第1部 名刺管理アプリ「Eight」を育てるチームと技術 Sansan株式会社 宍倉功一さん 法人向けのSanSanは.NETだが、個人向けのEightはRailsを採用。 spider for MySQL使うとテーブル単位でDB分割できて便利。 SLASHで効果測定。新人研修は徳島の一軒家で2週間。 高負荷サービスの話聞けてよかった。 ◆第2部 Railsとアジャイルで変える受託開発 株式会社メンバーズ 木村壮介さん CircleCIでfeature branchをHerokuに継続deploy - Masatomo Nakano Blog みたいなdeapというツール良かった。受託の関係でHerokuではなく、自社サーバを使うんだっけかな? ◆第3部 変化を産み出すための組織文化作り 株式会社フィードフォース 鈴木龍さん 他の発表より生々しい感じで存在感を出せてた感。途中の「お金は大事だよー」の画像とか、HipChatの実際のチャットとか追加されてて、数日前の素振りよりもすごく良くなってた。 ◆第4部 国内最大級のクラウドソーシングサービス「クラウドワークス」のつくりかた 株式会社クラウドワークス 大場光一郎さん CIはJenkinsツライのでSEMAPHORE を採用。 Amazon Redshift(分散RDBS)を使用。 分析用のプラットホームに向いてる Hadoopに似てる FlydataでRedShiftに転送 なぜCircleCIじゃなくてSEMAPHOREを採用したのでしょう?と質問したら、無料期間中に最後までテスト出来たのがSEMAPHOREだけだったからとのこと。CircleCI含めた他のサービスはは15分以上かかるテストkillされてしまったらしい。 ◆懇親会 何人かの方とお話出来た。弊社のメンバー多めだったけど。。 大場さんと話すのがちょっとした目的だったので、ホント来た甲斐がありました。 loading... loading... ちなみに私が大場さんを認識したのは[2007-10-04-1] でした。しかもここ、メンバーズさんのサイトでした。いろいろ繋がります。ちょっと見ると、ソニックガーデン興す前の倉貫さんもいらっしゃる。

2014-05-12 (Mon) · masutaka

Herokuにデプロイした時にChatWorkに通知するrakeタスク作った

使っているのはこんな環境です。 HerokuにRailsのProductionとStaging環境がある。 Stagingで任意のブランチを動かしたいことがある。 今までHerokuにデプロイする時はこうしてましたが、 $ git push prod master 今後はこのようになりました。 $ bundle exec rake deploy:prod Dryrunも出来ます。 $ bundle exec rake deploy:prod DRYRUN=1 Stagingで任意のブランチを動かしたい時はこちら。 $ bundle exec rake deploy:staging BRANCH=<any-branch> Gistのページ にも補足情報を書きました。 皆さん、Herokuへのデプロイはどんな方法でやってます? See also ChatWorkのAPIを叩けるGemをつくった - 良いあそなすちゃん チャットワークAPIを限定プレビュー公開します!|ChatWorkブログ 追記(2014-01-24): なぜかデプロイ後のHashが更新されないことがあったので、 git ls-remote prodの代わりにheroku releaseを使うようにしました。 なんだかコードが長くなってしまったorz

2014-01-19 (Sun) · masutaka

『Upgrading to Rails 4』をKindleとiBookで読めるようにした

Upgrading to Rails 4 を読んだ - HsbtDiary(2013-10-26) 遅ればせながら着手。。 Kindlegenのインストール あらかじめKindlegenをインストールしておきます。Amazonからダウンロー ド してきても良いですが、Homebrewもお手軽でよいと思います。 私のHomebrewはBoxenでインストールしたので[2013-11-23-1] 、kindlegen をmodules/people/manifests/masutaka.ppに追加してインストールしました。 素のHomebrewの方は、初めにhomebrew-binary をインストールする必要があ るみたいです。バイナリファイルの扱いが少し変わったんですね。 $ brew tap homebrew/binary $ brew install kindlegen mobiファイルとepubファイルへの変換 公開されている書籍をGitHubから持ってきて、kitabuで変換するだけです。 $ git clone git@github.com:alindeman/upgradingtorails4.git $ bundle install --path vendor/bundle $ bundle exec kitabu export $ ls output/ tmp upgradingtorails4.epub upgradingtorails4.html upgradingtorails4.mobi kitabuが生成するファイルはepubとhtmlファイルですが、Kindlegenがイン ストールされていると、mobiファイルも作ってくれるみたいです。もちろ ん手動でkindlegen upgradingtorails4.epubして作ることも出来ます。 あとは、mobiファイルをUSB接続やメールでKindleに転送し、epubファイル をiBookにドラッグアンドドロップするだけです。

2014-01-13 (Mon) · masutaka