アーカイブ

‘Rails’ カテゴリーのアーカイブ

Ruby on Rails 5速習実践ガイドを読みました。 このエントリーを含むはてなブックマーク はてなブックマーク - Ruby on Rails 5速習実践ガイドを読みました。

2018 年 10 月 25 日 Comments off

普段はソロ活動が多く、他の方が書いたコードを仕事の中で読むことがほとんどないので、実践的な章はもちろん、入門的な章も知識の棚卸しとして読みました。

自分にはまず、9章、10章が嬉しい内容でした。
全体として具体的で「あぁ、トラブるな、そこ。」だったり「なるほど、そんなことも考えないといけないな。」「そうすればいいのか。」という気持ちになることがところどころに。
それぞれ、当初から予想が出来ない、ということはないのかもしれませんが、そこを通った時に「こういう事があって、こうしました。」という感じで、実際に時間を掛けて付き合った上でないと出てこない内容だと思います。

あとは、この部分。

P392「そのため、Railsでアプリケーションを開発するならば、アプリケーションを放棄しない限り、ずっとバージョンアップをし続ける必要があると肝に銘じておきましょう。開発現場だけでなく、事業計画のレベルでも、RubyやRailsのバージョンアップの費用を常に計画に織り込むことが非常に重要です。」

「開発が終わったアプリにそんなにお金掛けられないですよね?」というような話を最近続けて聞くことがあったので、ここが刺さりました。

「終わった、とは?」という話は置いておいて、結果からいうと、自分はそこで「そういうケースではそもそもRailsは向いていないのだと思います。」と答えていました。おそらくこの言葉は「アプリを完成させることによって、または完成したアプリにはもう大きな費用がかからないことを前提に、その後の保守で利益を出す。」という発想から来ているのだと思います。
そのアプリに働いてもらって、そこから立った売り上げで体制を維持していく、という考え方でないと、なり立たない。経営的な話ですが、お仕事では必ず考える必要がある(が、得てして後回しにされがち)ので、気をつけておきたいところです。

発展編の方の章から話を始めてしまったのですが、入門編、レベルアップ編について。
まったくの新規ではなく、棚卸しの視点なのである程度は流し読みになってしまったのですが、準備から順番に、積み重ねるよう丁寧に解説されていると感じました。順番に進めていけば、おそらく躓くことはないと思います。

全体として、普通に開発を進めていくと必要になることが網羅されていて、木の幹になるような本だと思います。ひとまずこれを通して読んで、やってみましょう。もし足りないケースが出たら、そこで他を調べて枝葉を増やしていきましょう、と。発展編については、はじめの頃に読んでもおそらく難しいので、見出しを眺める程度にし、いまは置いておきましょう、という感じで。

毎月参加しているSaitama.rbでは、これからRuby/Railsの勉強を始めますという方がよくいらしゃいますが、この本をおすすめできると思っています。

カテゴリー: Rails, Ruby タグ:

I18nのキーにIntegerを使、わなかった。 このエントリーを含むはてなブックマーク はてなブックマーク - I18nのキーにIntegerを使、わなかった。

2018 年 9 月 25 日 Comments off

Numbers as translation keys · Issue #36 · svenfuchs/rails-i18n

sandstrom opened this issue on 9 Nov 2010 · 6 comments

ここで議論されていて、Symbolにしてもいけるよってコメントもあるのだけれど、React使った時に云々てコメントも付いていて、予期せぬところでハマりそうなのでStringにすることで落ち着きました。はい。

カテゴリー: Rails タグ:

RailsガイドにPRを出した。 このエントリーを含むはてなブックマーク はてなブックマーク - RailsガイドにPRを出した。

2018 年 8 月 20 日 Comments off

マイグレーションの作成は常に必要になっていました。 by yoshuki · Pull Request #701 · yasslab/railsguides.jp

新しくアプリを作った時でもマイグレーションファイルが作られなかったので原著を確認したところ、常に「rails active_storage:install」が必要になっていました。

些細なことなのですが、気が付いたので出してみました。こういう、書いてあるとおりの結果にならないやつ、知らないと身動き取れなくなりますね。

カテゴリー: Rails タグ:

いまnewするRailsアプリでファイル添付をどうするか。 このエントリーを含むはてなブックマーク はてなブックマーク - いまnewするRailsアプリでファイル添付をどうするか。

2018 年 7 月 27 日 Comments off

5.2なのでActiveStorageを、と思って始めたのですが、バリデーションを書いたりファイルを直に開いたり、Paperclipを使っていた時には任せていたところを自分で書くことが多くて、どうしようかな、と。

rails commit log流し読み(2018/05/17) – なるようになるブログ

openメソッドはblobをディスクに一時ファイルとして保存し、そのファイルに対して処理を実行出来るようになっています。

[via] ActiveStorageでblobのファイルを加工したい場合はActiveStorage::Downloadingをつかう

Rails5.2から入る新機能ActiveStorageを使うべきか?

Rails5.2.0リリース後、ファイルアップローダとしてActiveStorageを採用していいのでしょうか?

George Claghornさんのツイート: “I’m working on adding validations to Active Storage. It took a few failed attempts, but I’ve finally found an approach with promise.”

必要になったいまになってちゃんと追ったのですが、あぁ、そういうことなんですね、という気持ち。
まだActiveStorageで収まっている感じなのですが、Shrineを使ったことがないので調べてみようと思います。

カテゴリー: Rails タグ:

callbackで止める。filterで止める。 このエントリーを含むはてなブックマーク はてなブックマーク - callbackで止める。filterで止める。

2017 年 10 月 18 日 Comments off

ActiveRecord::Callbacks

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リファレンスで見つからなかったので、ガイドの方から見つけてきた。

カテゴリー: Rails タグ:

integerのidをbigintにするやつ。 このエントリーを含むはてなブックマーク はてなブックマーク - integerのidをbigintにするやつ。

2017 年 10 月 17 日 Comments off


使わなかったのですが、せっかく書いたので貼っておきますね。

カテゴリー: Rails タグ:

nginxとRackとX-Accel-Mappingと。その2 このエントリーを含むはてなブックマーク はてなブックマーク - nginxとRackとX-Accel-Mappingと。その2

2017 年 8 月 15 日 Comments off

GitHubからの通知メールがいくつかまとめて来てたため見逃してしまっていたのですが、この前Rackに投げたPRがマージされていました。

手元でパッチを当てていたので、嬉しい。詳細については↓に書いています。

nginxとRackとX-Accel-Mappingと。 » サイキョウライン
まず、課題となっている場所はここで、いまの実装はこんな感じ。

カテゴリー: Rails, Ruby タグ:

nginxとRackとX-Accel-Mappingと。 このエントリーを含むはてなブックマーク はてなブックマーク - nginxとRackとX-Accel-Mappingと。

2017 年 7 月 3 日 Comments off

Rack

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

nginx

設定はこう。「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

カテゴリー: Rails タグ:

libの場所について。 このエントリーを含むはてなブックマーク はてなブックマーク - libの場所について。

2017 年 3 月 6 日 Comments off

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つ存在することになるしで、どっちがいいかちょっと悩ましい。のでした。後者かなぁ。

カテゴリー: Rails タグ:

JSONリクエストの時のCSRF対策について。 このエントリーを含むはてなブックマーク はてなブックマーク - JSONリクエストの時のCSRF対策について。

2017 年 1 月 14 日 Comments off

ちゃんとドキュメントがあったのでメモ。

ActionController::RequestForgeryProtection

It’s important to remember that XML or JSON requests are also affected and if you’re building an API you should change forgery protection method in ApplicationController (by default: :exception):

カテゴリー: Rails タグ: