Rails Templateを使ってみる
最近なんか作ろうかと思ってから、作業開始するまでに寄り道してしまうことが多いような気がするので、開発効率上げるために、以前から利用してみたかったRails Templateを使ってみた。
公式
Rails アプリケーションのテンプレート - Railsガイド
これ
概要
mainの処理をafter_bundle以下に記載。
細かくメソッド分割したので、これを見たら、なんとなく概要は分かるかと思う。
after_bundle do run "spring stop" ## initial commit git_commit "rails new", with_rubocop: false ## install gems proc_install_rubocop proc_install_rspec proc_install_simplecov proc_install_pry proc_install_hamlit ## uninstall gems proc_uninstall_jbuilder if yes?("Would you like to uninstall jbuilder? (y/n): ") ## i18n proc_localize if yes?("Would you like to localize to Japan? (y/n): ") ## railtie proc_setup_railties ## initializers proc_setup_initializers end
after_bundleは初回にrails newやらwebpacker insatllした後の処理。
個人的には、デフォルトのrails newから変更を加えていく方式でコミットしたかったので、このようにした。
はまりどころ
spring
最初にspringを止めておかないと、以降のrails genarateが動作しなかった。(この辺は何が正しいかわからないが、止めたらうまくいった。)
run "spring stop"
その他
rubocop
とりあえずrailsのmasterを利用する形にした(Style/FrozenStringLiteralComment だけdisable)。
この辺はRails.versionでそれぞれのmasterの物を取得するようにしても良いかもしれない。
(他に良い方法がないだろうか)
まとめ
springの件ではまったりしたが、ユーザ入力に応じて実施することを変えられたりできるので、割となんでもできるという印象だが、 この辺はRailsやgemのversionによってちょいちょい変えていかないといけないので、 お仕事で使うなら本当にベーシックな物だけ揃えて、メンテナンスコストを下げておかないと辛くなりそう。
ご参考
Rails6.0.3.2 has been released!
Rails 6.0.3.2 has been released! | Riding Rails
security updateがreleaseされてました。
珍しい脆弱性だったのでご紹介。
急いであげる必要はないような脆弱性ですが、対応したい人は上げておきましょう。
内容
ここに書かれてます。
[CVE-2020-8185] Untrusted users able to run pending migrations in production
Using this issue, an attacker would be able to execute any migrations that are pending for a Rails app running in production mode. It is important to note that an attacker is limited to running migrations the application developer has already defined in their application and ones that have not already ran.
Pending Migrationが実行できるというなんとも変わった脆弱性でした。
というよりも、例外の詳細を表示させることができ、PendingMigrationがある場合は実行できるというもののようでした。
patchをみても、脆弱性の全容が全く分からなかったのですが、
ググってみると、ActionableExceptions
に関するもののようで
エラー画面からmigrateできる機能に関するもののようです。
こんなんあったんですね。(必要性は感じないけど)
以下に画像付きで紹介されてました。
rails commit log流し読み(2019/04/19) - なるようになるブログ
shellscriptでDBに大量データを登録する
ストアドプロシージャ使えない(面倒)、Rails Console利用できない場合にBulk Insertする例。すぐ忘れるのでメモ。
#!/bin/bash set -eu DB_USER="root" DB_PASS="pass" DB_NAME="db" DB_HOST="host" INSERT_NUM=100000 BREAK_NUM=1000 function execute_sql () { local sql=$1 mysql -u "${DB_USER}" -p"${DB_PASS}" -h "${DB_HOST}" "${DB_NAME}" -e "${sql}" } function main () { local insert_statement="INSERT INTO some_table (some_column)" insert_statement+=" VALUES" local bulk_count=0 for((i=0;i<INSERT_NUM;i++)); do if [ $bulk_count -eq 0 ]; then sql="${insert_statement}" else sql+=", " fi # values sql+="('some_value')" bulk_count=$(expr $bulk_count + 1) if [ $bulk_count -eq $BREAK_NUM ]; then execute_sql "${sql}" bulk_count=0 fi done # 端数のinsert if [ $bulk_count -ne 0 ]; then execute_sql "${sql}" bulk_count=0 fi } main
久しぶりにshell書くといろいろ辛く感じる。。 rubyで書けばよかった。。