15年経ってた。

[ref.] 21 » 4月 » 2006 » サイキョウライン
普段はソロ活動が多く、他の方が書いたコードを仕事の中で読むことがほとんどないので、実践的な章はもちろん、入門的な章も知識の棚卸しとして読みました。
自分にはまず、9章、10章が嬉しい内容でした。
全体として具体的で「あぁ、トラブるな、そこ。」だったり「なるほど、そんなことも考えないといけないな。」「そうすればいいのか。」という気持ちになることがところどころに。
それぞれ、当初から予想が出来ない、ということはないのかもしれませんが、そこを通った時に「こういう事があって、こうしました。」という感じで、実際に時間を掛けて付き合った上でないと出てこない内容だと思います。
あとは、この部分。
P392「そのため、Railsでアプリケーションを開発するならば、アプリケーションを放棄しない限り、ずっとバージョンアップをし続ける必要があると肝に銘じておきましょう。開発現場だけでなく、事業計画のレベルでも、RubyやRailsのバージョンアップの費用を常に計画に織り込むことが非常に重要です。」
「開発が終わったアプリにそんなにお金掛けられないですよね?」というような話を最近続けて聞くことがあったので、ここが刺さりました。
「終わった、とは?」という話は置いておいて、結果からいうと、自分はそこで「そういうケースではそもそもRailsは向いていないのだと思います。」と答えていました。おそらくこの言葉は「アプリを完成させることによって、または完成したアプリにはもう大きな費用がかからないことを前提に、その後の保守で利益を出す。」という発想から来ているのだと思います。
そのアプリに働いてもらって、そこから立った売り上げで体制を維持していく、という考え方でないと、なり立たない。経営的な話ですが、お仕事では必ず考える必要がある(が、得てして後回しにされがち)ので、気をつけておきたいところです。
発展編の方の章から話を始めてしまったのですが、入門編、レベルアップ編について。
まったくの新規ではなく、棚卸しの視点なのである程度は流し読みになってしまったのですが、準備から順番に、積み重ねるよう丁寧に解説されていると感じました。順番に進めていけば、おそらく躓くことはないと思います。
全体として、普通に開発を進めていくと必要になることが網羅されていて、木の幹になるような本だと思います。ひとまずこれを通して読んで、やってみましょう。もし足りないケースが出たら、そこで他を調べて枝葉を増やしていきましょう、と。発展編については、はじめの頃に読んでもおそらく難しいので、見出しを眺める程度にし、いまは置いておきましょう、という感じで。
毎月参加しているSaitama.rbでは、これからRuby/Railsの勉強を始めますという方がよくいらしゃいますが、この本をおすすめできると思っています。
Numbers as translation keys · Issue #36 · svenfuchs/rails-i18n
sandstrom opened this issue on 9 Nov 2010 · 6 comments
ここで議論されていて、Symbolにしてもいけるよってコメントもあるのだけれど、React使った時に云々てコメントも付いていて、予期せぬところでハマりそうなのでStringにすることで落ち着きました。はい。
マイグレーションの作成は常に必要になっていました。 by yoshuki · Pull Request #701 · yasslab/railsguides.jp
新しくアプリを作った時でもマイグレーションファイルが作られなかったので原著を確認したところ、常に「rails active_storage:install」が必要になっていました。
些細なことなのですが、気が付いたので出してみました。こういう、書いてあるとおりの結果にならないやつ、知らないと身動き取れなくなりますね。
5.2なのでActiveStorageを、と思って始めたのですが、バリデーションを書いたりファイルを直に開いたり、Paperclipを使っていた時には任せていたところを自分で書くことが多くて、どうしようかな、と。
rails commit log流し読み(2018/05/17) – なるようになるブログ
openメソッドはblobをディスクに一時ファイルとして保存し、そのファイルに対して処理を実行出来るようになっています。
[via] ActiveStorageでblobのファイルを加工したい場合はActiveStorage::Downloadingをつかう
Rails5.2から入る新機能ActiveStorageを使うべきか?
Rails5.2.0リリース後、ファイルアップローダとしてActiveStorageを採用していいのでしょうか?
必要になったいまになってちゃんと追ったのですが、あぁ、そういうことなんですね、という気持ち。
まだActiveStorageで収まっている感じなのですが、Shrineを使ったことがないので調べてみようと思います。
If the before_validation callback throws :abort, the process will be aborted and ActiveRecord::Base#save will return false.
ActiveRecordのコールバックでは:abortを投げるように変わっているけれど、ActionControllerのフィルターがどうなっていたのか分からなかったので調べたメモ。
Action Controller Overview — Ruby on Rails Guides
If a “before” filter renders or redirects, the action will not run.
APIリファレンスで見つからなかったので、ガイドの方から見つけてきた。
GitHubからの通知メールがいくつかまとめて来てたため見逃してしまっていたのですが、この前Rackに投げたPRがマージされていました。
Rackに投げたPRがマージされてた!嬉しい。 https://t.co/YxMLULl3of
— MIKAMI Yoshiyuki (@yoshuki) 2017年8月15日
手元でパッチを当てていたので、嬉しい。詳細については↓に書いています。
nginxとRackとX-Accel-Mappingと。 » サイキョウライン
まず、課題となっている場所はここで、いまの実装はこんな感じ。
https://github.com/rack/rack/blob/master/lib/rack/sendfile.rb#L149
まず、課題となっている場所はここで、いまの実装はこんな感じ。
def map_accel_path(env, path)
if mapping = @mappings.find { |internal,_| internal =~ path }
path.sub(*mapping)
elsif mapping = env['HTTP_X_ACCEL_MAPPING']
internal, external = mapping.split('=', 2).map(&:strip)
path.sub(/^#{internal}/i, external)
end
end
設定はこう。「X-Accel-Mapping」を複数定義している。
server {
location ~ /foo/(.+) {
internal;
alias /path/to/real/foo/$1;
}
location ~ /bar/(.+) {
internal;
alias /path/to/real/bar/$1;
}
location / {
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping '/path/to/releases/\d{14}/abc/=/foo/';
proxy_set_header X-Accel-Mapping '/path/to/releases/\d{14}/def/=/bar/';
}
}
複数の「X-Accel-Mapping」が定義されていると、Rackの「env[‘HTTP_X_ACCEL_MAPPING’]」に渡ってくる時は「, 」(カンマとスペース)で区切られた状態になる。
/path/to/releases/\d{14}/abc/=/foo/, /path/to/releases/\d{14}/def/=/bar/
こうなると、いまのRackの実装ではいきなり「=」でsplitしている(ひとつしか定義されていない前提)ため、結果として「internal」と「external 」はこんな感じになって、正しいパスを返せなくなる。
internal #=> '/path/to/releases/\d{14}/abc/'
external #=> '/foo/, /path/to/releases/\d{14}/def/=/bar/'
そこで、複数の「X-Accel-Mapping」が定義されることも考慮して、この様にしてみた。
def map_accel_path(env, path)
if mapping = @mappings.find { |internal,_| internal =~ path }
path.sub(*mapping)
elsif mapping = env['HTTP_X_ACCEL_MAPPING']
mapping.split(',').map(&:strip).each do |m|
internal, external = m.split('=', 2).map(&:strip)
new_path = path.sub(/^#{internal}/i, external)
return new_path unless path == new_path
end
path
end
end
これで「X-Accel-Mapping」の数に関わらず、定義したパスを返せるようになった。
ので、PR出してみた。どうかな。
https://github.com/rack/rack/pull/1187
autoload – Rails 5: Load lib files in production – Stack Overflow
Putting lib in app/lib is recommended by rails members
こんなやりとりを見て「おっ、そうなの?」ってことでまるっと移動してみたら、自分で作ったrakeタスクが見えなくなってしまった。
えー、ってことでソースを読んだからこんな感じになってた。
rails/engine.rb at v5.0.2 · rails/rails
paths[“lib/tasks”].existent.sort.each { |ext| load(ext) }
Rails.root直下に置くならconfig.eager_load_pathsに追加しなきゃならないし、app下に置くならrakeタスクは元の場所に残さなければならないから「lib」というディレクトリが2つ存在することになるしで、どっちがいいかちょっと悩ましい。のでした。後者かなぁ。