スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

技術関連 - Rails

【Heroku無料廃止】Railway.appでWheneverを使わずHeroku Schedulerのように定期処理を実行する

Wheneverのcron設定ファイルやRailway側の実行コマンドを変えて検証していましたが、 なかなか終わらないので発想を変えます。 rakeタスクを実行するエンドポイントを作り、 そこにNew Relicから一定時間毎にpingを送るようにすることで、 実質Herokuスケジ…

【2023年1月最新】Herokuから代替のRailway.appへRailsアプリ移行時に出たエラー【無料廃止】

Railwayデプロイ時に発生。 #18 1.183 [1/5] Validating package.json... #18 1.188 error technews@0.1.0: The engine "node" is incompatible with this module. Expected version "v14.0.0". Got "16.17.0" #18 1.201 info Visit https://yarnpkg.com/e…

【Rails】bundle install --jobs(-j)に指定するジョブ数を動的に設定するため、最大値について調べた

最大値が 4 だからなのかと思いましたが、 --jobs で指定できるジョブ数の最大値についての記述はドキュメント上にありませんでした。 これなら動的にジョブ数を変えられるのでは? と思い調べていると、 「指定可能なジョブ数はCPU のコア数と使用可能なメ…

【sitemap_generator】Ping failed for Bing: #<OpenURI::HTTPError: 410 Gone> not working【Ruby gem】

Ping failed for Bing: # で調べているとIssueやPRが出ていました。 2021年の12月にBingのping送信が廃止された?というような情報もありました。 これは現在のBingのping送信先URLを確認した方が早そうなので、 Bingウェブマスターツールを見にいきました。…

【awesome_print is not working】(pry) output error: #<NoMethodError: undefined method `marshal_dump' for #<ActiveModel::Errors:xxx>

エラー文「(pry) output error: #」でググるとIssueがヒット。 どうやらRailsから「marshal_dumpメソッド」が削除され、 その影響でawesome_printからも関係するコードが削除された模様。 Update CHANGELOG Remove usage of marshal_dump since this was rem…

【Rails Ruby】メソッドで特定のgemがインストール済かチェックする

ターミナルで $ gem list xxx のようにするのではなく、 メソッドで特定のgemがインストール済かチェックしたい。 ターミナルと同様にgemコマンドを使えばOKです。 gem '指定のgem名' で調べられます。 戻り値は、 引数のgemがインストール済ならtrueを返す …

【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法

やり方としては、 cache オプションと expires_in オプションを指定するだけなのですが、 生成されるキャッシュのキーについて補足しておきます。 結論、 下記のような感じになります。

【Rails】Herokuのデプロイ開始・完了をWebhookでLineNotifyへ通知する

LineNotifyの準備 1. LineNotifyのアクセストークンを発行する 2. LineNotifyのAPIを扱うクラスを作成する 3. 1で指定したグループに「Line Notify」アカウントを招待しておく Herokuの準備 3. HerokuからのWebhook通知を受けるルーティングを追加する 4. デ…

【SendGrid Rails Heroku】SendGridアドオンで作成したアカウントが凍結されてもメール送信する方法

元々アプリ用に取得していたGmailのメルアドを、 SendGridの「Single Sender Verification」で設定することで、 SendGridからメール送信できるようにしました。 1、 下記「Single Sender Verification」の、 「Create New Sender」ボタンをクリックして登録…

【Nuxt Vue Rails】axiosのContent-Typeがappliation/jsonにならない

解決策 getの場合は、 第二引数にheaders: をキーとして、 指定したいヘッダのオプションを渡せばOK。 this.$axios.get(url, { headers: { "Content-Type": "application/json", "Accept": "application/json" }}) postの場合は、 第三引数にheaders: をキー…

【Stripe Rails】決済モーダル内のemailにJavaScriptで値を設定する

3、StripeCheckout.configureで生成したオブジェクトから呼び出す、openメソッドの引数のキーにemailを指定し、2の値を設定する 決済する *** // JavaScript var handler = StripeCheckout.configure({ key: '', locale: 'auto', currency: 'jpy', panelLa…

【Stripe Rails】サブスクリプションの即時決済時に、請求書と領収書のダウンロードリンクを取得する

Stripe::Subscription#latest_invoice で、 最新の請求書が取得でき、 latest_invoice.chargeでStripe::ChargeのIdが取れるので、 Stripe::Charge.retrieve(latest_invoice.charge).receipt_url のようにして領収書表示ページのリンク(Stripe::Charge#receip…

【ActiveAdmin】レコードが無い場合の、まだありません。「作成する」を非表示に【blank_slate content link】

解決策 ActiveAdmin::Views::Pages::Indexというクラスにある、 render_blank_slate というメソッドにモンキーパッチを当てます。 render_blank_slate www.rubydoc.info ja.ymlのキー (blank_slate、content、link) github.com やり方 1、 initializerで、モ…

【Active Admin】Unable to find input class JsonInput

son型のDBカラムを、 active_adminの管理画面フォームで表示させようとすると、 Unable to find input class JsonInput のエラー。 backtraceの一部 @input_class_finder.find(as) rescue Formtastic::InputClassFinder::NotFoundError raise Formtastic::Un…

【Rails】ymlファイルの中でerbを使い、動的に値を取得してrakeタスクの引数にする

ymlファイルの中でerbを使い、 動的に値を取得してrakeタスクの引数にしようとしていた。 が、 erbを使った部分が文字列のままで渡ってきて、 上手くいかなかった。 ymlファイル例は下記。 # test.yml.erb - id: age: 18 *** こういう値が欲しいが、 #=> [{ …

【active_admin】json型columnのinputエリアの、初期value表示でハマる

最初に結論 json型なので、 参照時のキーは「文字列キー」にする必要がある。 シンボルじゃダメ。 それだけのことでした。 起こったこと 下記のようなjson型カラムの中にあるデータを、 active_adminのフォームの初期値として表示させたい。 t.json "options…

【Rspec Capybara】confirmダイアログが2回表示されるsystem specを書く

やり方 単純にダイアログの回数分、 accept_confirm をネストすればOK。 # 1回目のダイアログ page.accept_confirm do # 2回目のダイアログ page.accept_confirm do # ダイアログが全てOKなら実施したい何らかの処理 first('div[data-cell="del"]>div>form>b…

【Rails】論理削除を有効にする方法【paranoia discard】

paranoiaのREAD.MEで、 paranoiaは非推奨になった旨が追記されています。 今後は 「discard」 を使うようにしましょう。 1、paranoiaというgemをインストール 2、モデルにdeleted_atというカラムを追加する 3、active_record.rbにacts_as_paranoiaと追記…

【ActiveAdmin】formのcheck_boxで、dialogやalertの代わりに注釈(hint)をつける

ActiveAdminで管理画面を作っていて、 「非エンジニアのサポートチームの人が使うから、チェックボックスにはダイアログかアラート出したいな...」 と思い、 「chack_boxをON、OFFしたらdialogかalertを出すオプション」 的なものを探していたのですが、 che…

【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする

「allow_destroy: true」 を使わず、 f.inputのname属性に 「:_destroy」 を指定すればOKです。 例 form do |f| f.inputs 'Contract' do # 親モデル Contract end # 子モデル Option f.has_many :options, do |o| # allow_destroy: trueは不要 o.input :_des…

【ActiveAdmin】デフォルトのcreateとupdateの処理をカスタマイズしたい

controller do〜endブロックの中で、 createなりupdateメソッドをオーバーライドすればOKです。 オーバーライドする際は、 リダイレクトの処理も書いてあげる必要があります。 ちなみに、 createもupdateも、 デフォルトのリダイレクト先は「showアクション…

【ActiveAdmin】select_boxで表示するcollectionのscopeを指定したい

結論 collectionオプションを使います。 collectionの引数に、 scopeを渡してあげればOKです。 例 f.inputs for: [:plan, f.object.plan || Plan.new] do |p| p.input :name, as: :select, collection: Plan.all.map(&:name) # Planモデルの全nameをセレクト…

【ActiveAdmin】formで、belongs_toなmodelのstrong_parameterを指定する

permit_paramsに、 子モデルの「名称」と「属性」を指定すればOKです。 例えば、 下記のようなモデルがあるとします。 # 親 class Plan attribute :name attribute :price has_many :contracts end # 子 class Contract belongs_to :plan end この場合、 Act…

【ActiveAdmin】フォームのタイトル(パネル)部分を色付けする

panel do〜endブロックの中に、 f.inputを入れてあげればOKです。 form do |f| panel '次月プラン' do f.input :name f.input :id end end するとこんな感じになります。 f:id:mah666hhh:20201107111535p:plain nameのラベルは、 I18nで翻訳が当たっているの…

【ActiveAdmin】ヘッダー下のデフォルト作成ボタンを非表示にする

config.clear_action_items! の1行を追加すればOKです。 ActiveAdmin.register Item do # これを追加 config.clear_action_items! end これで、 ヘッダータイトルの作成ボタンが非表示になりました。 f:id:mah666hhh:20201107092354p:plain clear_action_ite…

RSpecで、Base64エンコードされた画像ファイルをテストする

こんにちは、mah(@RailsRubyMah6h)です。 今回は、 RSpecでBase64エンコードされた画像ファイルをテストする です。 1、 テストに使う画像ファイルを、Base64でエンコードしたバイナリ文字列に変換する (下記のようなサイトを使うとラクです) https://lab.sy…

【Rails6】gem toastr-railsを導入できない【ReferenceError: toastr is not defined】

## 【Rails6】gem toastr-railsを導入できない【ReferenceError: toastr is not defined】 出ているエラー ReferenceError: toastr is not defined 結論 下記の記事の手順通りにやると、toastr-railsを入れられました。 medium.com 起きていたこと 公式ドキ…

【Ruby on Jets】dynamodb-localを実行した時に、javaのバージョンが古くてエラー発生。Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/logging/log4j/spi/ExtendedLogger : Unsupported major.minor version 52.0

javaのバージョンを上げれば解決しそう。 javaのバージョンを確認。 $ javac -version javac 1.6.0_65

【必見】Railsアプリでadsenseの自動広告が表示されない時の5つの確認事項

1. 自動広告はオンになっているか 2. Corsの設定をしたか 3. きちんとheadタグ内にコードを貼っているか 4. Adsenseサイト申請時のコードが残っていないか 5. コードを貼り付けてから1、2日間は経過しているか

【Rails】aタグからhref属性の値を正規表現で抽出する方法

href\s=\s"([^"]*)" という正規表現を使うことで実現可能です。 このstack over flowの回答がドンピシャでした。 > You should be able to use a regular expression like this: > href\s*=\s*"([^"]*)" See this Rubular example of that expression. > The…