ruby

libvips で heic フォーマットの変換に対応する

apt-get install libvipsで install した libvips は、heic フォーマットに対応していない。例えば ruby-vips で使うような場合は、以下のようにソースコードからコンパイルする必要があります。 FROM ruby:3.2.2-slim as base # ==========================…

Aws::S3::Client.copy_object の copy_source は、URL encode されていなければならない

例えば、バケットからバケットへオブジェクトをコピーするときに、 `The specified key does not exist.` とエラーが出る場合がありました。 client = Aws::S3::Client.new client.copy_object( bucket: out_bucket_name, copy_source: src_bucket_name + '/…

Kubernetes を利用時、大きいデータサイズの画像を複数回POSTするとエラーが出る

Rails を用いて、画像アップロードをするシステムを作っていた時、画像を連続3回アップロードすると502エラーが出る場合があった。これは、メモリの使用量が大きくなり、pod 内のプロセスがkill されていたことが原因だった。 Ruby on Rails のメモリ消費が…

ActiveJob で active_elastic_job を利用時、設定が反映されない

active_slastic_job を利用しているとき、Rails のバージョンを変更したところ、 I, [2018-10-12T16:21:11.029048 #653] INFO -- : [d8e52f46-4c12-40b5-ab99-f593f6306a95] Started POST "/" for 127.0.0.1 at 2018-10-12 16:21:11 +0000 F, [2018-10-12T16…

Rails5 ActiveRecord で select をする時の高速化便利関数

select 高速化のヒント class Parent has_many :childs end class Child belongs_to :parent end has_many の配列データ側を絞り込む。なければ parent も返らない。 Parent.includes(:childs).where("childs.age > ?", 20).references(:childs) belongs_to …

Rails で Base64 エンコードされた文字を Carrierwave で保存する最も良い方法

File クラスを使うと、ストレージの読み書きが発生し、速度が落ちるため、メモリ上だけで処理を行う方針。 File クラスと同じ処理をするため、メソッドを定義する。 class StringFileIO < StringIO def self.create_from_canvas_base64 str return nil if st…

ActiveAdmin で、belongs_to, accepts_nested_attributes_for を設定したmodelも同時に表示・編集する

ActiveAdmin で、belongs_to, accepts_nested_attributes_for を設定したmodelも同時に表示・編集する ActiveAdmin.register UserLogin do # ... form do |f| f.inputs nil, for: [:user, f.object.user || User.new] do |fc| fc.input :icon fc.input :full…

Whenever の schedule.rb 内の設定を環境ごとに変える

$ bundle exec whenever --update-crontab appname --set environment=productionこのように処理を実行した時、schedule.rb の中では、ENV['RAILS_ENV'] で取得できない。$ config/schedule.rb require File.expand_path(File.dirname(__FILE__) + "/environ…

Ruby で 連想配列を定義しつつ定数も定義する

class Status VALUES = { publish: PUBLISH = 0, pending: PENDING = 1, draft: DRAFT = 2, trash: TRASH = 3, } end このようにアクセスできる Status::PUBLISH Status::VALUES

Capistrano3 でRailsをデプロイするとき、current_path, shared_path などを正しく取得する

$ config/deploy.rb # config valid only for current version of Capistrano lock '3.4.0' set :application, 'hoge' set :repo_url, 'git@bitbucket.org:hoge/hoge.git' # Default value for :scm is :git set :scm, :git # set :rbenv_ruby, '2.2.1' # De…

heroku の Postgres のデータを、独自サーバーの mysql へ転送する

アップロード先 mysqlのサーバー起動 $ gem install taps $ gem install mysql $ taps server mysql://root@localhost/releasenote_stg?encoding=utf8 <basic認証名前> <basic認証パスワード> 5000 番ポートでサーバーが立ち上がります。 サーバーIP アドレスを確認しておく。 コピー元のheroku </basic認証パスワード></basic認証名前>…

Carrierwave で 独自のversion ファイルを保存する

例えば、wav ファイルを 保存したときに、別バージョンとして mp3 も保存するような場合。 version :mp3 do process :convert_mp3 # この名前が、最終的なファイル名になる。 # デフォルトで、 mp3_****.wav になっているので、リネーム def full_filename f…

Rails で Base64 エンコードされたデータを Carrierwave で保存する

class Api::FilesController < Api::ApplicationController def create # file = params[:data] data_str = params[:data_str] file = File.new # file.data = data file.data_str = data_str end end class File < ActiveRecord::Base mount_uploader :data…

CarrierWave で mp3 保存時に 音の長さを保存する

Mp3Info は、パス指定でなければ利用出来ないので、 current_path によって、一時ファイルを開き直している。 class ItemDataUploader < CarrierWave::Uploader::Base include CarrierWave::MimeTypes storage :fog process :set_content_type process :chec…

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Internal Server Error SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed これで直る curl -o cert.pem http://curl.haxx.se/ca/cacert.pem mv cert.pem /usr/local/etc/openssl

Rails で、データベースと表示される時間を日本時間にそろえる

Rails は、内部の日時をUTCで管理しているため、 DBに保存された時間と、表示される時間が異なります。$ config/application.rb config.active_record.default_timezone = :local config.active_record.time_zone_aware_attributes = false config.time_zone…

ActiveAdmin 検索メニューをカスタマイズ

いらない項目だけ非表示にする remove_filter :user 既存を残し、必要な物を追加する preserve_default_filters! filter :created_at, as: :date_range 条件によって項目を出す。 false の時は、デフォルトで表示される場合も、非表示になる filter :hoge, :…

ActiveAdmin で複合プライマリーキーを使う

composite_primary_keys の gem をインストールするmodel に、主キーを配列で指定、display_name も指定 class Hoge < ActiveRecord::Base self.primary_keys = :user_id, :teacher_id def display_name "#{self.user_id}, #{self.teacher_id}" end end これ…

ActiveAdmin で Undefined method ***s_url for #<Admin::***sController>

before_create do # hoge end この中の処理が原因だった。

プログラムから動的に mp3 file を返すとき、safari で再生されない

携帯電話などではお馴染みだが、Rangeヘッダーがついている場合は、 206 のステータスで部分的に返す必要がある。safari でだけ再生されなかったが、 返しているデータバイト数が1バイト足りないためだった。 def main # 何かの方法で読み込む bin = load se…

Rails4 ActiveAdmin

Rails4 では ActiveRecord で更新可能なフィールドを指定する方法が変わった。 以前までの、 attr_accessible :name, :title これは使わなくなった。今後は、コントローラーでアクセスできるフィールドを指定するようになる。 ActiveAdmin.register User do …

Unity で IOS のビルド時、framework を自動設定する

現在ネットでみつかるプログラムは、 xcodeproj 0.3.0 を使っており、 xcodeproj 0.6.0 を使った物が無かったので作った。公式ドキュメントは間違っているし、gemソース中のコメントも間違っているため、 自分で作りたい場合は、ソースを読んで作るしか無い…

Cloudn の Object Storage を Rails の Carrierwave で S3 の代わりに使用する

endpoint を定義すれば良い。 設定ファイルを独自に作成。 管理コンソールの、アカウント / セキュリティー証明書 の所に、 アクセスキーIDとシークレットキーは書かれている。自分は以下のように定義して使用しています。$ vi config/carrierwave.yml devel…

unicorn サブディレクトリで起動する

設定追加 ./config.ru # This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/environment', __FILE__) map ENV['RAILS_RELATIVE_URL_ROOT'] do run MyAppName::Application end 公開用のディレクト…

アプリケーションで認証後にS3のコンテンツを返す

Rails の controller 側 class DownloadController < ApplicationController def action # 認証処理 ... resource_id = 2 resource = Resource.find resource_id response.header['X-Accel-Redirect'] = '/reproxy' response.header['X-Reproxy-URL'] = reso…

In-App Purchase

iOSアプリでアイテムを購入したときに、Appleのサーバーで購入チェックを行う。 apple が用意している、pdfを元に素直に実装すると、以下のようになる。 class AppStore STATUS_OK = 0 /** * @param[in] reveipt base64エンコードされた、レシートデータ * @…

Apple PUSH 通知 エラー

/var/www/html/dashboard/vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/commands/runner.rb:53:in `eval': SSL_connect returned=1 errno=0 state=SSLv3 read server session ticket A: sslv3 alert certificate expired (OpenSSL::SSL::SSLErr…

ActiveRecord で Trigger を使用する

hair_trigger というgem があったがエラーが出て機能しなかった。execute メソッドで直接SQLを実行することになる。migrate 実行順が影響するので、migration ファイルを別に作成 $ ./script/rails g migration trigger_photos たとえば以下のようにsqlを流…

carrierwave で処理後の画像サイズを取得する

image を セットしたとき、同時にカラムにサイズを保存する処理 class PhotoImageLargeUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick ... process resize_to_fit: [100, 100] process convert: 'jpeg' process :hoge def hoge # rma…

ruby で html アンエスケープ

install $ vim Gemfile 追加 gem "htmlentities" $ bundle install 使い方 puts HTMLEntities.new.decode "&#9834;"