cookieにsecure属性をつける
自分用メモ railsの計算でNaNやInfinityを回避する
自分用メモ
railsの計算でNaNやInfinityを回避する
一旦変数として入れるとうまくいく、一発で処理させようとするとエラー
下の内容は正規表現で数字かどうか判断している
mysqlバックアップ_メモ(引用)
からの引用です。自分用メモです
- 解説が不十分な部分ついては、補足(コピペで本文に取り込める体裁だとありがたい)を頂けると助かります!
- 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
#!/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-select --install で失敗した時は手動でインストールする - Qiita
brew doctorでのWarningを解決してみた(for Mac) - Qiita
brew doctorでWarningが出たので解決方法まとめました。(for Mac) - Qiita
vi ~/.zshrc で
setopt nonomatch
追記(mysql再インストールでファイルが消えないため)
Homebrewで入れたMySQLが起動できないのでアンインストール&再インストールした話 - Qiita
上に続いて以下homebrew環境の所有者を修復を試みるも。。
[macOS Sierra] Homebrewのupdateが出来ない。 - Qiita
最終的にhomebrewの再インストールから行い
なんとか解決できた模様
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)
を参考に解決
2022/2/23再びmysqlが動かなかくなったので追記
やったことmysql再インストール
https://qiita.com/O-yeah1980/items/9acaaf036930f6f462f6
参考記事過去のものと同じ
watashinoMacBook-Pro ~ % brew uninstall mysql@5.7
mysql削除後も関連するファイル・フォルダが生きているので削除します。(uninstallで一緒に消してくれれば良いのに・・・)
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で証明書取得
基本はこのページ(証明書の導入完了まで)
ec2のポート変更も行ったhttps
Nginxの設定
自分の場合ここの場所でDNSを設定してたのでここ(sudo vim /etc/nginx/conf.d/〇〇.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を再起動します。
sudo service nginx restart
以上でSSLの設定は完了です。
ブラウザからこのサイトにアクセスしてみましょう。https接続になるはずです。
また、http://として接続した場合でも、自動でhttps接続になるはずです。
自動更新の設定
作業はルートユーザーで行った
$ sudo su -
crontab -e # rootでcrontabを編集すれば、設定コマンド内でsudoを使わなくて済みます。
// 午前4時に自動更新をするcron登録
* * * * * 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:00と 20: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デーモンを再起動します。
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はホームページなどで以下のような画面をみた事がないでしょうか?

写真が時間でスライドしていくように見せるために便利なのがslickになります
①実装方法
実装方法は多くのサイトで紹介されていますが私は、以下の記事がわかりやすく感じました
https://qiita.com/milneo/items/3560cb01cba92c2ccb6f
このサイト通りやったのですがchromの検証ツールを使うと「ajax-loader.gif」が見つからないというエラーメッセージが出るため
assetフォルダーのimageフォルダーの中に「ajax-loader.gif」を保存し
slick-theme.scssに
を追記これで見つからないよ!!エラーは消えました
②レスポンシブ対応
レスポンシブ対応はcssで行うと思ってました!確かに1枚1枚の写真サイズはCSSで設定できるのですがslickでスライドさせる写真の枚数などは
carousel.js内に 「breakpoint:○○」を設定することでスマホ、タブレットなど画面サイズによって切り分ける方法を取りました こうすることで画面サイズが変わってもサイズに合わせてスライダーを表字する事ができました!!参考になればと思います
コントローラーのリファクタリング #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
②コントローラに複雑な処理を記述している場合
記述内容をモデルに移します
こちらも方法はシンプルでコントローラーに以下のように記述します
上はサンプルですがイコールの右辺が読み込みに行くコントローラーの名前になっています モデル自体は以下がサンプルで
とすることでモデルに処理内容を読み込みにいき結果を受け取る事ができます
※もし実行時にコントローラーでモデルが見つからないという趣旨のエラーが発生する時は、
を記述してあげる事で読み込めるようになる事も有ります
(読み込める時と読み込めない時の違いははっきりわかっていませんご存知の方がおられましたら教えて頂けると幸いです)
以上大きく2つ紹介しましたが参考にして頂けたら幸いです!!