hamayuzinの日記

ITベンチャーに新卒入社し、エンジニアとかデータサイエンティスト、とかやってます。あの時 あれやってたな的な備忘録にできれば。

rails

【Rails/react】Railsでreactを使う時のhelper methodの違い

railsでreactを使っていると、2つhelper methodがあることに気づく <%= javascript_pack_tag ‘hello_react’ %> <%= react_component("HelloWorld", { greeting: "Hello" }) %> それぞれの違いがよくわかってなかったけど、変数渡せるかなのかな?? javascr…

【rails/uniq制約】uniq制約のあるカラムの値を入れ替えたい時どうしようか問題

とりあえずrailsの場合 uniq制約のあるカラムの値を入れ替えたい 例えば下記の場合 - seqがuniq制約ついている。 accounts テーブル id name seq 1 hoge1 1 2 hoge2 2 3 hoge3 3 id = 1とid = 3のseqを入れ替えたいとき どうしよう Account.find(1).update(s…

【Rails/devise】rails5のdeviseでusernameとemailのどちらでもログインできるようにする

rails5環境で、deviseで認証を行っているプロダクトで どうしてもemailとusernameの両方でloginできるようにする必要が出た その時のメモ 公式 devise gem のwikiにまとまっているものがある(なぜか2つ How To: Allow users to sign in using their userna…

【Rails/rspec】Railsのrsecテスト時間を半分以下にした話

Rails5のアプリケーションで、rspecテストを動かしている。 よくある話で、circle ci上で30分も時間がかかっていた。 時間がもったいないので、早くできないか調べた話。 やったことは、そもそも基本なことが多く 今回は、並列実行はしていない。 それでも、…

【rails/puma/capistrano】capistranoでrails pumaをdeployする時の pumaの設定ファイルについて

rails環境でproduction, staging, localでpumaを使っている場合に、capistranoでdeployすると 設定ファイルが勝手に、puma.rbをsharedに作ってくれる。 puma worker killerの設定をしたくて、自前のpuma.rbを 各サーバーに起きたくなった フォルダ切っちゃえ…

【nginx/fluentd/s3/athena】fluentdでs3にlogを出してathenaで分析できるようにする その2

auto scale関係で、サーバーのログがすぐ消えてしまう環境で、ログをどこかに置いておきたい場合がある。 今回は、nginxのaccess_logを、fluentdでS3にアップロードし aws athenaで分析できるようにする 環境は、aws ec2のamazon linux上。 【目次】 ec2にfl…

【nginx/fluentd/s3/athena】fluentdでs3にlogを出してathenaで分析できるようにする その1

auto scale関係で、サーバーのログがすぐ消えてしまう環境で、ログをどこかに置いておきたい場合がある。 今回は、nginxのaccess_logを、fluentdでS3にアップロードし aws athenaで分析できるようにする 環境は、aws ec2のamazon linux上。 【目次】 ec2にfl…

【Rails】Railsのgem自体のupdate

よく忘れるのでメモ railsのバージョン上げる gem 'rails', '~> 5.1', '>= 5.1.4' railsだけupdate bundle update rails railsのupdate bin/rails app:update

【Rails/encrypted secrets】rails5.1からのencrypted secretsに移行する

何度かrailsアプリケーションで、secretsからencrypted secretsに移行したので、メモ やること - .env等使わず、encrypted secretsだけで運用する - database.ymlの情報も secretsから読み込むようにする - 諸事の事情で、ENVに入れるようにする encrypted s…

【Rails】helperの使い所

rails の helperの使い所について まとめると view helperにビジネスロジックを入れちゃだめだよね helperは関数みたいな感じ 名字と名前を持つUserモデルがあったときに class User < ApplicationRecord end create_table "users" do |t| t.integer "first_…

【ansible/aws】ansibleで aws の ec2上に rails nginx 環境を作成する

リポジトリはこちら github.com やりたいこと railsを使っており awsのec2にdeployしている。 都度都度、サーバー立てて、構成を作るのがめんどくさいので、 ansibleで構築できるようにする。 chefは会社で使用しているが、一から自前で作ると ansibleより疲…

【Rails/sidekiq】Rails5でsidekiqを使ったとかの設定とか

環境:rails5.1.0 rails5.1でsidekiq使ったので、その時の設定とかメモ defaultのretry count設定 Sidekiq.configure_server do |config| config.redis = { url: "#{ENV['REDIS']}" } Sidekiq.default_worker_options['retry'] = 3 end delay methodを使える…

【rails/capistrano】railsでcapistrano deploy内で、secrets.yml or secrets.yml.encの値を使う方法

環境 rails5.1.3 railsでcapistrano deployする時に deploy.rb や、rake タスク内で、 railsのsecrets ファイルを参照したいことがよくある。 1週間くらい うまく使えないか調べてたが 方法があった 方法 deploy.rbの中で、下記を記述するだけ 今回は、ridge…

【rails/capistrano】Railsでcapistrano deployするときに、rake task内やdeploy.rb内でsecrets.yml が使えない問題

環境: rails 5.1 問題 railsでcapistranoでdeployするときに、 rakeタスク (lib/capistrano/tasks/hogehoge.rb とか) deploy.rb 内で、secrets.yml内の変数が使えない問題・・・・ 結論 今のところ dotenvで頑張るくらいしかない。。。 考察 そもそもrails…

【Rails/seed_fu】railsでcapistrano deploy時に、seed fuを毎回自動で走らせたい

環境: rails5.1 ruby 2.4.1 seed fu いいよね。便利で。 capistrano deploy時に、seed fuを毎回自動で走らせたい時があったので その方法をメモ 注意 今回はstaging環境で、初期開発時に、社内テスト触る環境を毎回作るのがまんどくさくて、自動化した あま…

【Rails/secrets】Railsのinitializesでsecrets.ymlにある値を使う方法

環境:Rails5.1 carrierwave 等の initializeで secrets.yml (rails5.1からは、secrets.yml.enc)を使いたい。 そんなときに、いろんな方法があるが、下記みたな方法もある。 今回は、carrierwave の initializeで secrets.ymlから awsの情報取ってくる。 env…

【SSL/Rails】ALBorELB + Nginx + Rails の時に、httpをhttpsにredirectさせるには

ALBorELB + Nginx + Rails 環境で、http で来たのを、httpsにredirectさせたい 2つ方法があるのだが、どちらがいいのやら・・・ ※通信に関しては、下記の場合です。 User -https-> ALB -http-> nginx -http> rails ちなみに下記がポイントとなるみたい HTTP…

【puma/rails/capistrano】pumactl stderr: bash: bundle: command not found とかで、deployできない

nginx puma rails 環境で capistranoでdeployしていると上記エラーでdeployできなかった エラー内容 Command: cd /data/hogehoge/current && ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.4.1" RACK_ENV="staging" ; bundle exec pumactl -S /d…

【rails/puma/nginx/cap】rails5.1をnginx puma環境にcap deployするときの設定

railsをnginx puma環境にcap deployするときの設定を残しておく rubyはrbenvで管理する webpack secrets.yml.key ridgepoleを使用している nginx upstream hogehoge { server unix:/data/hogehoge/shared/tmp/sockets/puma.sock; } geo $allow_ip_flag { def…

【cap | rails】cap deployでtar: This does not look like a tar archiveのとき

rails で capistarnoでのdeployをしているときに DEBUG [b12800e2] fatal: Not a valid object name DEBUG [b12800e2] tar: This does not look like a tar archive DEBUG [b12800e2] tar: Exiting with failure status due to previous errors とかなったら…

【nginx】sitemapをpublic/sitemaps/下に作成して、google先生にクローリングしてもらう

諸々の事情で、sitemapをs3にあげていたんだけど ふと思うことがあって、public下に移した config/sitemap.rb SitemapGenerator::Sitemap.default_host = "https://hogehoge.jp" SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/' SitemapGenerator::S…

【Rails/mail開封率】Railsでメールを送って、開封されたかどうかを判定する

メールを送信して、そのメールが開封されたか見たい場合があると思います。 めっちゃ簡単です。 方法は単純で - メールの末尾に1ピクセルの画像を設置 - この画像が読み込まれたら、開封されたとみなす - 画像読み込み時に、サーバーにIDつきで送ることで、…

【Ruby/tmpfile】ruby で tmpfileで CSVを作成する

Ruby Railsで tmpfileを使ってCSVを使う方法 単純でありきたいだけどいつもわすれる。 今回は、SJISでencordingしつつ アーティスト名と曲名の一覧のCSVを作成する。 (また、所要でFTPに上げる) # tmpfile作成 tf = Tempfile.new(["hogehoge", '.csv'], en…

【Rails/Bootstrap/modal】rails bootstrapのmodalをajaxで操作する

とあるアーティストの曲を取得したい場合を考える 「曲の一覧」というリンクをクリックすると そのアーティストの一覧を取得して、曲の一覧をモーダルで出す。 index.haml:曲の一覧を表示する %a.open_modal{disable: true, id: @artist.id} 曲の一覧 - con…

【rails/heroku/sitemap】heroku環境下のrailsでsitemapを設定する

heroku環境下で動いているrailsは、sitemap_generator gemだけではうまく動かない (作成したファイルを置けないなんだよ。。。) github.com そこで、AWSのS3に置く方法を用いる sitemapの作成 sitemap_generator gemをインストールして rake sitemap:insta…

【Rails/iframe】Railsでiframeのheightを設定する方法

railsでiframeの高さを設定するのが以外とめんどくさかった cssで設定するとよろし レスポンシブにもなる test.css .iframe { width: 100%; height: 500px; } @media screen { .iframe-wrapper { position: relative; width: 100%; } .iframe { position: ab…

【rspec/rails】railsのrspecでhelperをテストする

rspecを使った、helperのテスト方法 基本は他のテストと同じ 記述方法 app/helpers/test_helper.rb module TestHelper def test_method 'テストだよ' end end spec/helpers/test_helper.rb require 'rails_helper' RSpec.describe TestHelper do include Tes…

【heroku/ridgepole】herokuでridgepole/mysqlを動かす

herokuにrailsプロダクトをアップロードするにあたり、 ridgepoleでつまづいた エラー1:[ERROR] No such file or directory @ rb_sysopen - /app/config/database.yml ridgpoleを実行する際、下記コードを実行するのだが heroku run 'bundle exec ridgepole…

【heroku/ridgepole】herokuでridgepole/mysqlを動かす

herokuにrailsプロダクトをアップロードするにあたり、 ridgepoleでつまづいた エラー1:[ERROR] No such file or directory @ rb_sysopen - /app/config/database.yml ridgpoleを実行する際、下記コードを実行するのだが heroku run 'bundle exec ridgepole…

【Rails/パンくず】Railsでパンくずリストを作る簡単な方法

Webサイト作っていると、パンくずリスト作りたくなる。 railsではいい感じにしてくれるgemがある。 github.com gemfileに上記gem追加して、bundle installする。 アーティスト>曲の場合 app/controllers/songs_controller.rb class SongsController < Appli…