Rakeタスクの実装memo✍
Rakeタスクとは?
- アプリケーションを起動せずに定義した処理を実行することができるやつ
- わざわざアプリを起動せず定期タスクを実行できたりするので便利
(実装手順)
rails g task status_task
lib/tasks/
配下に'status_task.rake'が作成される。
(記述例)
# 名前空間 namespace :status_task do # タスクの説明 desc => description(説明) desc '公開待ちの中で、公開日時が過去になっているものがあれば、ステータスを「公開」に変更されるようにする' # update_status_task => タスクの名前 task update_status_task: :environment do # 実行したい処理を記述する場所 Article.publish_wait.past_published.find_each(&:published!) end end
- 名前空間とはタスクが沢山あった時にグループ分けできるもの
:environment
はおまじないくらいの理解でOK
タスク一覧の確認コマンド
rake -T
参照
authorizeメソッドについて✍
authorize(@article)
authorizeとはなんぞ?ってなったので、かいつまんでメモしておく✍
gem 'pundit'の導入によって使用される
Punditは認可周りの機能を作成するのに有効なGem
policyクラスをapp/policies/に配置する
ApplicaitonPolicyでは、モデルオブジェクトを
record
で表している
class ApplicationPolicy attr_reader :user, :record
この部分?
user
はcurrent_user
が呼ばれてるっぽい。
authorizeメソッドは
ApplicaitonPolicyを継承しているクラスのインスタンスにおける
current_user
とrecord
を渡してくれるアクション名から該当Policyを推論する
冒頭の例やと@article
を特定してるんかな?
まだ難易度高目なんでこれくらいで先に進もう。。
参照
enumについてmemo✍
※使い方は奥が深そうなので理解したところだけ
enumは列挙型のことで、
整数が割り当てられた文字を順番に出力していく。可読性が上がるメリットがある。
間隔を空けて定義すると、
値の中間の状態を追加で定義することになった場合に追加しやすい。gemを追加して日本語化すると更に便利
モデルファイルに定義
enum: status: { draft: 0, in_review: 10, published: 20, archived: 30 }
参照
【Rails】Enumってどんな子?使えるの? - Qiita
nilガードについてmemo✍
左辺がnilの場合は値が代入され、既に値が入っている場合値の代入は行われない。
pry(main)> a = nil => nil pry(main)> a ||= "OK" => "OK" pry(main)> b = 1 => 1 pry(main)> b ||= "OK" => 1
実は左辺がfalseになる場合のみ値の代入が行われ、左辺がtrueになる場合は値の代入が行われない。
pry(main)> a = "" => "" pry(main)> a ||= "OK" => "" pry(main)> b = 0 => 0 pry(main)> b ||= "OK" => 0 pry(main)> c = [] => [] pry(main)> c ||= "OK" => [] pry(main)> d = {} => {} pry(main)> d ||= "OK" => {} pry(main)> e = false => false pry(main)> e ||= "OK" => "OK"
参考
【Ruby on Rails】FactoryBotの記述省略✍
spec/rails_helper.rb
RSpec.configure do |config| config.include FactoryBot::Syntax::Methods end
Factorybotを使う時
let(:project) { FactoryBot.create(:project) }
↓コイツを
let(:project) { create(:project) }
にしてもOK◎
以上!
サムネイルのHTML設定
先日学習復習用アプリとしてリリースした『褒めて遣わす』について
サムネイルを設定した箇所だけアウトプットしておきます!
OGP(Open Graph Protocol)とは
「Open Graph Protcol」の略で、FacebookやTwitterなどのSNSでシェアした際に、設定したWEBページのタイトルやイメージ画像、詳細などを正しく伝えるためのhtml要素
とのこと。
OGPとは?設定するべき理由と設定方法について | デジマギルド
↓今回はこの部分だけ
<!DOCTYPE html> <html> <head> ・・・ <meta property="og:title" content="『褒めて遣わす』"> <meta property="og:description" content="褒める力を磨くトレーニング用アプリ(願望)です。"> <meta property="og:image" content="https://i.gyazo.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxx.png"> ・・・ </head>
タイトル、文章は↓が対応してる(そのまんまなので割愛)
<meta property="og:title" content="『褒めて遣わす』"> <meta property="og:description" content="褒める力を磨くトレーニング用アプリ(願望)です。">
画像設定について
画像についてはサイズで見た目が変わったので補足で説明入れておきます。
※これ多分Mattermostに限った話かも?
因みにサイズが小さいとこんな見た目になる。
※この時<meta property="og:site_name" content="『褒めて遣わす』">
も記載してたので余計なタイトルも混じってます。
色々調べてたら取り敢えず1280×720ピクセルが良い感じになるっぽかったんで Keynoteに画像を貼り付けてからGyazoで切り取りました。
※実際はGyazoで切り取る時にピクセル表示されてるのでそれを頼りしてます。
それから作成されたリンクをコピー
↓コイツに反映
<meta property="og:image" content="https://i.gyazo.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxx.png">
最後に作ったアプリ貼っておく(ペタ)
やっぱりはてなブログやと違う見た目になる(笑)
Railsで簡単なlinebot作ってみた①(環境構築編)
かなり見切り発車的にlinebot作ってみることにしました。
出来たとこまで順番に学習メモ✍
使用バージョン
環境構築
% rails _5.1.6_ アプリ名 --database=postgresql --skip-bundle
・herokuはSQliteが使えないみたいなんでPostgreSQLを使う
source 'https://rubygems.org' gem 'rails', '5.1.6' gem 'puma', '3.9.1' gem 'sass-rails', '5.0.6' gem 'uglifier', '3.2.0' gem 'coffee-rails', '4.2.2' gem 'jquery-rails', '4.3.1' gem 'turbolinks', '5.0.1' gem 'jbuilder', '2.7.0' group :development, :test do gem 'sqlite3', '1.3.13' gem 'byebug', '9.0.6', platform: :mri end group :development do gem 'web-console', '3.5.1' gem 'listen', '3.1.5' gem 'spring', '2.0.2' gem 'spring-watcher-listen', '2.0.1' end group :test do gem 'rails-controller-testing', '1.0.2' gem 'minitest', '5.10.3' gem 'minitest-reporters', '1.1.14' gem 'guard', '2.16.2' gem 'guard-minitest', '2.4.4' end group :production do gem 'pg', '0.20.0' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
% bundle install --without production
% rails s
・エラーに出くわす
Gem::LoadError (Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).):
・database.ymlでdevelopment環境はpostgresqlを使えとなっていたところsqlite3に修正
https://qiita.com/jnchito/items/f9c3be449fd164176efahttps://teratail.com/questions/141785
・rails newしたときにdb指定してたからややこしくなったのかも。
・無事Yay! You’re on Rails!
番外
herokuへのデプロイ
% heroku create
% git push heroku master
・エラーに出くわす
error: src refspec master does not match any error: failed to push some refs to 'herokuのURL'
・mastarちゃうで!とのこと。(せやせやmainやった)
% git push heroku main
https://zenn.dev/shimotaroo/articles/14ef835293981a
・コレで通りました、、と思ったらまたエラー(長いので割愛)
・以下の記事と完全一致なのでそのまま実行して解決◎
https://qiita.com/m6mmsf/items/fb8a8672df98bdb59c9c
無事デプロイ完了♪
つづく、、