なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Ruby

rubyzip でパーミッション付きで解凍したい

タイトルまま。 require 'zip' Zip::File.open(file) do |zip_file| zip_file.each do |entry| entry.restore_permissions = true # ここ! entry.extract end end このままだと、ディレクトリが来たときとか死ぬ気がするけど、それはそれで。

Administrate の Enumerize プラグインを作った

最近、管理画面に Administrate を採用していて、かつ enum の i18n とかで Enumerize を使っているので、良い感じにするためのプラグインを作りました。 administrate-field-enumerize | RubyGems.org | your community gem host 他の Field と同じように、…

macOS で rmagick をインストールしたい

rmagick のインストールがしたかった。 bundle コマンドで rmagick を入れようとすると、下のようなエラーが出る。 ERROR: Error installing rmagick: ERROR: Failed to build gem native extension. current directory: /usr/local/lib/ruby/gems/2.4.0/gem…

rails_admin で表示するフィールドをカスタマイズしたい

例えば、 created_at とか updated_at とかはいらないんだけど、他は表示したい。 あと、追加で comment みたいなのも表示してほしいとかそういった場合: config.model 'User' do include_fields_if do not name.match /_at$/ end field :comment end こんな…

find_by_sql でも preload したい

ActiveRecord のクエリじゃきついような時、 find_by_sql を使うと思うのですが、 こっちは preload ができないのでしたかった。 ちなみに Rails 5 です。 users = User.find_by_sql(["SELECT * FROM ...", id]) ActiveRecord::Associations::Preloader.new.…

Rails で ROLLBACK された理由が知りたい

レコード作成時、なにも COMMIT されなかったり ROLLBACK されたりして、 理由がわからなかったので調べる方法。 song = Song.new(title: "恋愛サーキュレーション") song.save # -> ROLLBACK logger.debug song.errors.inspect # -> {message: "すでにある…

Rails でエラーメッセージを良い感じにしたい

rails-i18n を入れてくれるとだいたい良い感じにしてくれるんですけども、 「なんかちがうんよー」みたいな時もあります。 例えば、次のようなとき: class Attachment belongs_to :illust mount_uploader :file, ImageUploader end # illust.rb class Illus…

Ruby で匿名クラスをつくりたい

匿名クラスを作りたかった。 @ninomiya = Class.new do attr_accessor :asuka end.new @ninomiya.asuka = "かわいい" 参考: Anonymous Classes In Ruby

Hyper-V 上で better_errors を使いたい

やってる事的には Vagrant だとかで better_errors を使うのと同じ感じですが、 ちょっと IP の確認が面倒だったので、メモしておきます。 better_errors は通常、 localhost でのみ動作するように設定されています。 なので仮想マシン、例えば Virtual Box …

gem install で怒られる

Bash on Ubuntu で gem install すると、下のように怒られます。 Error details ArgumentError: parent directory is world writable but not sticky /home/natsuneko/.rbenv/versions/2.3.1/lib/ruby/2.3.0/tmpdir.rb:93:in `ensure in mktmpdir' /home/nat…

rugged を使うときハマったこと

rugged を使って、 Git を使ったアプリケーションを作っている時にハマったことをメモしてます。 Rugged::SshError: username does not match previous request 下のような感じで、リポジトリを clone しようとすると怒られます。 credential = Rugged::Cred…

Rails のコールバックで、新規作成時のみに呼ぶようにする

Ruby on Rails にて、 before_action などのコールバックにて、 例えば INSERT 文が発行される場合のみに呼ぶようにする方法のメモ。 create が呼ばれる際、バリデーション前に set_uuid を実行する場合は、 before_validation :set_uuid, on: :create とい…

nginx + ngx_mruby での、 Let's Encrypt の SSL 証明書の動的読み込み

この記事を見て、やってみようと思ったのでメモしとこうかなと。 タイトルに Let's Encrypt のと含めてますが、他でも問題ない(はず)です。 HTTP/2 への mruby 活用やこれからの TLS 設定と大量証明書設定の効率化について とりあえず、まずは ngx_mruby を…

Rails でフォロー機能を実装したい

すでに情報が腐るほどあるフォロー機能ですが、理解を深めるためにも、 自分の言葉でまとめ直してみます。 Rails で、 Twitter や app.net などにある、ユーザーどうしのフォロー機能を 実装したいとします。 どうやら、いい感じの gem が存在しているようで…

Rails で変な URL にリダイレクトされるのを治す

Rails にて、 http://123-456-789-123 みたいな、 IP アドレスを - でつなげたような アドレスにリダイレクトされてつらいことになったので、解決方法をメモしておきます。 発生してた状況は、下のようなもの nginx を SSL アクセラレータとして使用中 上に …

Rails で、 JSON 中に HTML を含める

学校でもバイト先でも Rails を使っているせいで、 C# をする時間がない。 けども Rails 記事を書いていくよ。 Rails にて、hoge.json の時のレスポンスに、 HTML を含めてみます。 通常の JBuilder を使った JSON は、こんな感じ。 json.set! ここに、 app/…

omniauth-google-oauth2 で認証時にハマったこと

前回に引き続き、こんかいも OmniAuth 関連です。 omniauth-google-oauth2 にて、ちょっとハマったことがあるので、メモしておきます。 GitHub - zquestz/omniauth-google-oauth2 Google OAuth 2 を使って、外部認証ができる omniauth-google-oauth2 ですが…

gem を作る

先日 Electron で遊ぶと言いつつ、ずっと rubygem を作っていました。 今後も作ることはあるかもしれないので、メモしておきます。 まず、雛形を作ります。 $ bundle gem new_gem --test --test 付きで実行することで、テストの雛形も生成してくれます。 つ…

Rails アプリで Google アカウントでログインしたい

Ruby on Rails でログインするようなサービスを作るときに、 ID/PW ではなく、 Twitter や Facebook, Google アカウントでログインさせたいことがしばしばあります。 私の場合は、 Google アカウントでログインさせたいので、その処理方法をメモしておきます…

OS X El Capitan で therubyracer をいれる

いつもどおり Ruby + Rails 環境整えて、いざ bundle install すると、 therubyracer まわりでエラーが起きたので、メモです。 qiita.com 上の記事によると、 OS バージョンと libv8, therubyracer のバージョンを それぞれ合わせる必要があるらしいです。 …

Rails + unicorn + nginx で動かす

普段、 nginx でサーバーを動かしているので、 ついでに Rails + unicorn も動かしてみます。 基本的にはこの記事どおりにやっていく。 qiita.com その中で、私が躓いたものだけメモっておきます。 初歩的なものなのは見逃してください。 アクセスしても真っ…

Carrierwave で、 version のサイズを動的に変更する

そんなことより風が強い Carrierwave っていう、ファイルアップロードに便利な gem があるんだけれども、 その中にある HogeUploader クラスは、アップロード時に画像を加工できます。 class ImageUploader < CarrierWave::Uploader::Base # RMagick を使っ…

mixpanel を使ってみる

mixpanel という、アクセス解析ツールの存在を教えてもらったので、 とりあえず、私が理解した分だけメモしておくことにしました。 多分、間違えてるところがいっぱいあると思うので、記事見た人で分かる人がいたら 教えてくれると嬉しいです(;w;) Mixpan…

gem install が遅い時

仮想マシン上で環境構築してる時、 gem のインストールが終わらなかった。 その時の対策。 [Vagrant] 「CentOS の box で bundle install や gem install が異常に遅い」問題を解決する方法 Vagrant + CentOS でやっていたので、上の記事で治るかと思ったけ…

rubyzip で、日本語パスを含んだファイルを解凍する

どうやら、 rubyzip で日本語を含むファイルの zip を解凍すると、いろいろ死ぬっぽい。 その対策。 下のような構成のファイルを解凍すると、なにか色々おかしくなる。 ruby.zip |-テスト | |- 画像001.png | |- memo.txt 解凍後は、下のように色々変になる…

rubyzip で Windows 向けに ZIP ファイルを作る

rubyzip で ZIP 圧縮して、 Windows でそれを解凍したら、 日本語を含むファイルが文字化けしている。 それだと困るので、その対処方法。 調べたところ、 Mac や Linux では文字コードが UTF-8 だけど、 Windows では Shift-JIS だからとのこと。 なので、フ…

Windows + Vagrant + Rails の比較的快適な環境を作る

Windows で Ruby on Rails の開発環境を作るメモです。 正確には、作った上でそれを快適にするまでのメモです。 環境 ホスト ・ Windows 8.1 ・ Virtual Box 5.0.0 ・ Vagrant 1.7.4 ゲスト ・ CentOS 6.5 基本的な構築はこちらの記事が分かり易いので、それ…