cookieにsecure属性をつける

cookieにsecure属性をつける

cookieにsecure属性をつけることで、cookieも暗号化されます。 平文だと、万が一盗まれるようなことがあるとまずいので、secure属性をつけるのがいいでしょう。

config/initializers/session_store.rb

Rails.application.config.session_store(secure: Rails.env.production?)

mikamisan.hatenablog.com

自分用メモ railsの計算でNaNやInfinityを回避する

自分用メモ

railsの計算でNaNやInfinityを回避する

一旦変数として入れるとうまくいく、一発で処理させようとするとエラー

下の内容は正規表現で数字かどうか判断している

profit_ratio = ((1 - (@total_costs.to_f / @total_price.to_f ) )* 100).round(2)
if profit_ratio.to_s =~ /^[+-]?[0-9]*[\.]?[0-9]+$/
else
profit_ratio = ""
end
 
 
htmlでは
<% kakeritu = ((price_detail.unit_price.to_f / price_detail.list_price.to_f )* 100).round(1) %>
<% if kakeritu.to_s =~ /^[+-]?(?:\d+.?\d|.\d+)$/ %>
<td class= "estimate_print_td2_12"> <%= kakeritu %>%</td>
<% else %>
<td class= "estimate_print_td2_12"> </td>
<% end %>

mysqlバックアップ_メモ(引用)

qiita.com

からの引用です。自分用メモです

mysql の定期的なバックアップ

最終更新日 投稿日 2013年10月16日
  • 解説が不十分な部分ついては、補足(コピペで本文に取り込める体裁だとありがたい)を頂けると助かります!
  • mysqlのバックアップ手法に関しては様々な方法がありますので随時追記していきたいと思います!
  • サーバー構成に関しても様々なパターンがありますので、随時追記していきたいと思います。

mysql-server 5.1.8以降では、以前の手法ではWarningが発生するようになったため、
それ回避した上での手法を公開したいと思います。

まずmysql5.1.8以前のバージョンでのバックアップ手法

 

mysqldump --opt --all-databases --default-character-set=binary -u root > /root/backup/mysql/all_db.sql

以前はこれで問題なかったのですが、5.1.8以降では上記コマンドを実行すると下記のWaningが
発生するようになりました。

 

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

これはバージョン5.1.8からmysqlデータベースにeventsテーブルが追加されたことが原因です。

mysqldump コマンドに対して全てのデータベース内容をdumpする「--all-databases」のオプションを付与している場合、
これまでの手法では上記のeventsテーブルのみが対象外となってしまっているために発生しているWaningです。

この回避策としては、mysqldum コマンドに対して「--all-databases」のオプションを付与している場合は
さらに「--events」 のオプションを追加する必要があります。

これらの内容を反映した上での、バックアップ取得スクリプトを作成してみました。

 /bin/sh + mysqldump バージョン

 事前準備(バックアップ保存用ディレクトリの作成)

 

sudo mkdir /root/backup/mysql

自分の場合rootの下にbackupディレクトリを作って
mysqlディレクトリをひとつづつ作った

 

 スクリプト作成開始

 
 

 

 
sudo vim /root/backup4mysql.sh
 
 
 

 

 
 
backup4mysql.sh
 
#!/bin/sh

# 他のユーザからバックアップを読み込めないようにする
umask 077

# バックアップファイルを何日分残しておくか(一ヶ月分)
period=31
# バックアップファイルを保存するディレクトリ
dirpath='/root/backup/mysql'

# ファイル名を定義(※ファイル名で日付がわかるようにしておきます)
filename=`date +%y%m%d`

# mysqldump実行(ファイルサイズ圧縮の為gzで圧縮しておきます。)
mysqldump --opt --all-databases --events --default-character-set=binary -u root --password=パスワード | gzip > $dirpath/$filename.sql.gz

# 古いバックアップファイルを削除
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql.gz
 
 
 
 
 アクセス権限設定変更

このshellにはmysqlのrootのパスワードが丸々記載されているため、rootユーザ以外は内容を閲覧できなくしておく必要があります。

 
 
 
 
sudo chmod 0700 /root/backup4mysql.sh 
 
 
sudo chmod 0700 /root/backup4mysql.sh 

 cron設定

最後にこのスクリプトをcronで定期実行することにより、定期的に全データベースのバックアップを取得することが可能となります。

 

su -  #root権限にすでにrootなら不要
echo "0 3 * * * root /root/backup4mysql.sh" > /etc/cron.d/backup4mysql
上入力でファイル自動作成された

以上、ご参考になれば幸いです。

ある日突然mysqlが使えなくなって深みにハマった

Xcodeの再インストール - Qiita

xcode-select --install で失敗した時は手動でインストールする - Qiita

stackoverflow.com

brew doctorでのWarningを解決してみた(for Mac) - Qiita

brew doctorでWarningが出たので解決方法まとめました。(for Mac) - Qiita

vi ~/.zshrc で 

setopt nonomatch

追記(mysql再インストールでファイルが消えないため)

Homebrewで入れたMySQLが起動できないのでアンインストール&再インストールした話 - Qiita

 

 

teratail.com

上に続いて以下homebrew環境の所有者を修復を試みるも。。

[macOS Sierra] Homebrewのupdateが出来ない。 - Qiita

最終的にhomebrewの再インストールから行い

Homebrew の再インストール - Qiita

なんとか解決できた模様

 

2021/11/24再びmysqlが動かなかくなったので追記

おこなっった事mysqlのアンインストール

brew doctorでエラーがwarningが出ないようにした今回はx-codeのアップデートは無視

mysqlが動くようになったが

rails sで

Library not loaded: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib (LoadError)

MySQL起動エラーの対処の仕方【Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)】 - Qiita

を参考に解決

 

2022/2/23再びmysqlが動かなかくなったので追記

やったことmysql再インストール

https://qiita.com/O-yeah1980/items/9acaaf036930f6f462f6

参考記事過去のものと同じ

watashinoMacBook-Pro ~ % brew uninstall mysql@5.7

mysql削除後も関連するファイル・フォルダが生きているので削除します。(uninstallで一緒に消してくれれば良いのに・・・)

 
  1. watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/Cellar/mysql* watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/bin/mysql* watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/var/mysql* watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/share/mysql* watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/opt/mysql* watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/etc/my.cnf watashinoMacBook-Pro ~ % sudo rm -rf /etc/mysql/my.cnf watashinoMacBook-Pro ~ % sudo rm -rf /etc/my.cnf watashinoMacBook-Pro ~ % sudo rm -rf ~/.my.cnf

brew doctorでチェック

警告解消 例
 
watashinoMacBook-Pro ~ % softwareupdate --all --install --force
watashinoMacBook-Pro ~ % rm -rf /usr/local/lib/libmecab.2.dylib
watashinoMacBook-Pro ~ % brew link python@3.8

watashinoMacBook-Pro ~ % brew install mysql@5.7

パス通し

watashinoMacBook-Pro ~ % echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc
watashinoMacBook-Pro ~ % source ~/.zshrc


watashinoMacBook-Pro ~ % which mysql
/usr/local/opt/mysql@5.6/bin/mysql

 4. mysql起動

 
watashinoMacBook-Pro ~ % mysql.server start
Starting MySQL
. SUCCESS! 

ec2 rails http→https接続 備忘録 Let's Encryptを使ってhttps対応

Let's Encryptで証明書取得

基本はこのページ証明書の導入完了まで)

www.yoheim.net

ec2のポート変更も行ったhttps

Nginxの設定

nginx.conf 

自分の場合ここの場所でDNSを設定してたのでここ(sudo vim /etc/nginx/conf.d/〇〇.conf)

nginx.conf
 
server {
   server_nameドメイン名(例:○○.com)】;
   #listen80;
   #listen 80→443に変更 listen 443 ssl default deferred; ssl_certificate /etc/letsencrypt/live/test.hoge.jp/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/test.hoge.jp/privkey.pem; # <中略> # } location / { add_header Access-Control-Allow-Origin *; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # httpsの設定をしてあげないとRailsの方でSSL判定できずに無限ループに陥る proxy_set_header X-FORWARDED_PROTO https; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://app; break; } }

# 以下を追記 ------------------------------------
# httpでのアクセスをhttpsに転送する設定です。 
# ドメイン名は変更してください!
server {
  listen      80;
  server_nameドメイン名(例:○○.com)】;
  return      301 https://$host$request_uri;
}

また、Railsの場合は、proxy_set_header X-FORWARDED_PROTO https;
を忘れずに。詳しい解説は以下が参考になります。

Nginx のリバースプロキシ設定のメモ - Qiita

nginxを再起動します。

terminal
 
sudo service nginx restart

以上でSSLの設定は完了です。
ブラウザからこのサイトにアクセスしてみましょう。https接続になるはずです。
また、http://として接続した場合でも、自動でhttps接続になるはずです。

自動更新の設定

作業はルートユーザーで行った

$ sudo su -
terminal
 
crontab -e # rootでcrontabを編集すれば、設定コマンド内でsudoを使わなくて済みます。
crontab
 
0 4 * * * sudo certbot renew --no-self-upgrade --post-hook "service nginx restart"
// 午前4時に自動更新をするcron登録
crontab
 
*  *  *  *  * command
分 時 日 月 曜日
 
範囲 0-59 0-23 1-31 1-12 0-7(0と7はSunday)

全てワイルドカード[*]にすると、毎分実行。
また、[ , ]でand、[ / ]でステップ数、[ - ]で範囲を指定できる。

実行例
 
32 02 * * *            02:32に実行
*/10 * * * *        10分おきに実行
0-10 20 * * *           20:00から20:10まで 1分毎に実行
0,30 20 * * 2,4         毎週,,木曜の 20:0020:30に実行
* 20 * * *         20:00から 20:59まで 1分おきに実行
0 1 * * *          1:00に実行
0 * * * *          毎時 0分に 1時間おきに実行
2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02に実行
 

※ --no-self-upgradeを付ける事で、自動でバージョアップするのを防いでいます。(AWSドキュメントより)

※ --debugを付けているのは、下記のエラーが出ないようにするためです。

※ --post-hookで証明書更新後にNginxも再起動する様にしています。

設定後、cronデーモンを再起動します。

terminal
 
sudo service crond restart
 

参考サイト

[サーバー] Let's EncryptとNginxで、https対応を行う - YoheiM .NET

Amazon Linux + Rails + Nginx環境にLet's Encryptを導入する - Qiita

無料でHTTPS化できる「Let's Encrypt」をやってみた ※install.sh付き - Qiita

[Rails][Nginx][AWS] Let's EncryptをEC2上のRailsに入れてHttpsにする - Qiita

Let's Enctyptの証明書の更新関連のコマンドのメモ - Qiita

 

 

slick実装方法 + レスポンシブ対応 #ruby #rails #slick #slider

今回はslickの実装方法+レスポンシブ対応について紹介したいと思います

slickはホームページなどで以下のような画面をみた事がないでしょうか?

f:id:mi---tomo:20191211070546p:plain

写真が時間でスライドしていくように見せるために便利なのがslickになります

①実装方法

実装方法は多くのサイトで紹介されていますが私は、以下の記事がわかりやすく感じました

https://qiita.com/milneo/items/3560cb01cba92c2ccb6f

このサイト通りやったのですがchromの検証ツールを使うと「ajax-loader.gif」が見つからないというエラーメッセージが出るため

assetフォルダーのimageフォルダーの中に「ajax-loader.gif」を保存し

slick-theme.scssに

{
background: #fff url('./ajax-loader.gif') center center no-repeat;
}

を追記これで見つからないよ!!エラーは消えました

②レスポンシブ対応

レスポンシブ対応はcssで行うと思ってました!確かに1枚1枚の写真サイズはCSSで設定できるのですがslickでスライドさせる写真の枚数などは

carousel.js内に 「breakpoint:○○」を設定することでスマホタブレットなど画面サイズによって切り分ける方法を取りました こうすることで画面サイズが変わってもサイズに合わせてスライダーを表字する事ができました!!参考になればと思います

$(document).on('turbolinks:load', function(){
 
$('.slick').slick({
autoplay:true,
dots: false,
arrows: false,
speed: 1500,
slidesToShow: 6,
slidesToScroll: 1,
autoplaySpeed: 0,
cssEase: 'linear',
responsive: [
{
  breakpoint: 1024,
  settings: {
  slidesToShow: 4,
  slidesToScroll: 1,
  dots: false,
  cssEase: 'linear',
 }
},
{
  breakpoint: 600,
  settings: {
  slidesToShow: 3,
  slidesToScroll: 1,
  cssEase: 'linear',
 }
},
{
  breakpoint: 480,
  settings: {
  slidesToShow: 2,
  slidesToScroll: 1
  }
}
 
]
});
}); 

コントローラーのリファクタリング #ruby #rails

今回はコントローラーのリファクタリングについてメモを残したいと思います

ruby on rails でコントローラーにコードを記述していって気づくとコントローラー内のコードの量がパンパンになってなぜこんなに長くなってしまったんだ( ;∀;)

という事が起きてしまう人も中にはいるのではないかと思います。そのうちの1人が私です

今回はコントローラーのリファクタリングについて大きく2つの方法を紹介したいと思います

①複数のコントローラに同じ処理が記述されている場合

 

app/controllers/concerns/○○.rb(任意の名前)ファイルを追加し、moduleを設定したのち必要な箇所で読み込ませる

具体的には以下のように記述します

module TyoufukuRefactoring
  extend ActiveSupport::Concern

  private

  def syorinaiyou
    //中身記述
  end
end

そしてコントローラーないでは

class MainsController < ApplicationController
  include TyoufukuRefactoring
  before_action :syorinaiyou
end

こうする事で複数コントローラーにある記述を省略して記述できるようになります

 

親コントローラにメソッドを定義する

単純な話にはなりますが親コントローラーに共通の内容を記述する方法です

共通の親がApplicationControllerだった場合

app/controllers/application_controller.rbの中を以下のように記述するだけです

def ApplicationController < ActionController::Base

 //共通の内容を記述
end

 

②コントローラに複雑な処理を記述している場合

記述内容をモデルに移します

こちらも方法はシンプルでコントローラーに以下のように記述します

@products = Sorting.sorting_products(order_id)

上はサンプルですがイコールの右辺が読み込みに行くコントローラーの名前になっています モデル自体は以下がサンプルで

class Sorting
 def self.sorting_products(order_id)
  //処理内容記述
 end
end

とすることでモデルに処理内容を読み込みにいき結果を受け取る事ができます

※もし実行時にコントローラーでモデルが見つからないという趣旨のエラーが発生する時は、

require "sorting.rb"

を記述してあげる事で読み込めるようになる事も有ります

(読み込める時と読み込めない時の違いははっきりわかっていませんご存知の方がおられましたら教えて頂けると幸いです)

以上大きく2つ紹介しましたが参考にして頂けたら幸いです!!