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

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

技術関連-Ruby

【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】Herokuのデプロイ開始・完了をWebhookでLineNotifyへ通知する

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

【Ruby】 はてなブログのAPIで記事一覧取得時、 下書きを除外する

Nokogiriでパースして得たオブジェクトにto_sして、 scanで下書きかどうかを表す文字列を抜き出す。 # 参考にしたサイトのコードのget_entry_list()の内部 # entry = Nokogiri::XML.parse(entry, nil, 'utf-8') draft_flgs = entry.to_s.scan(/\.*/) # こん…

【Stripe Ruby】決済領収書の表示言語を日本語に変更する

Stripe::Customer.createメソッドの引数に、 preferred_locales: ['ja'] を指定すればOKです。 customer = Stripe::Customer.create( email: params[:stripeEmail], source: params[:stripeToken], preferred_locales: ['ja'], #=> これを追加

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

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

Rubyで画像ファイルの形式(gif, png, jpg)を判定する

こんにちは、mah(@RailsRubyMah6h)です。 今回は、 画像ファイルの形式をバリデーションする必要があったので、 備忘録として残しておきます。 今回の例では、 Base64でエンコードされた、画像のバイナリ文字列 が渡ってくることを想定します。 ファイル名の…

【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

【Ruby】aタグのhref属性を書き換えて、target="_blank"も付与する方法【gsub】

gsubを使って書き換えます。 "About" 上記のようなaタグを、 "About" のように書き換える例です。

【Ruby Selenium】wait.untilブロックでTimeoutしたら外側にraiseされる

Selenium::WebDriver::Error::TimeoutErrorは、 直下のrescueで補足される と思っていたが、そうではなかった。 これに気づくのにめちゃくちゃ時間がかかりました笑 調べていくと、 wait.untilブロックの外側 にraiseされていました...

【Ruby】Seleniumでエラー Other element would receive the click の解決方法

2通りの解決方法がありました。 上に被っている要素を、閉じるなり移動させる clickではなくsubmitを使う submitの方が手っ取り早かったので、自分はsubmitで対応しました。

【Ruby スクレイピング】Seleniumで要素が空かどうか判定する

キーワードに一致する商品が見つからない場合、 "該当する商品が見つかりませんでした" というテキストが表示されます。 なのでそれを判定条件にしました。 下記、サンプルコードです。 # ヘッドレス(ブラウザを立ち上げない)で動かすためのオプションを生成…

【Rails】DBに紐つかない属性(カラム)をモデルに追加する

Railsの標準機能である attribute API を使います。 attribute :virtual_tags, type: Array virtual_tagsという属性 に 配列の値 を保持させることが出来るようになります。 もし、typeを指定しない場合は、設定した値のclassで、値が設定されます。

【Rubyでスクレイピング】Seleniumでdata属性を取得

attribute() を使います。 attribute('data-XXX') のような形です。 # data-remarksというプロパティを持つ要素を全て取得。戻り値は取得出来た要素の配列 driver.find_elements(:xpath, "//*[@id='search']/div[1]/div[2]/div/span[4]/div[1]/div[#{i + 1}]…

【正規表現】Rubyで、文字列がURLかどうかをチェックする

URI.regexp.match(検証したい文字列).nil? で出来ます。 # URLなのでMatchDataオブジェクトを返す。よって .nil? はfalseを返す > URI.regexp.match('https://www.malanka.tech').nil? => false # URLではないのでマッチせずにnilを返す。よって .nil? はtru…

【Ruby】privateメソッドはModule#instance_methodsでの検索対象外

privateメソッドは、Module#instance_methodsの検索対象外。 Hoge.instance_methods(false).include?(:public_method) #=> インスタンスメソッドの名前が配列で返却される。

herokuで画像ファイルをassets/下に置いても認識されない

herokuではどうもassets/audios以下を読み込んでくれない。 そのため、Tempfile, Tempdirライブラリを使用し、 1. mp3ファイルをTempfileとして生成し、Tempdirに仮置き 2. S3にアップロード 3. 1のファイルを削除する という手順を取ることで対応出来ました…

【Ruby】URL文字列から、相対パスを取得する手順

まず URI.parse でURI::Generic のサブクラスのインスタンスを生成します。 相対パスは、.path で取得出来ます。 自分はパスの頭の / が不要だったので、delete(‘/‘)で削除します。 これでURLから欲しい文字列を取り出す事ができました。

【Ruby】論理演算子 &&= について

【Ruby】論理演算子 &&= について 左辺がtrueと見なされる値なら、右辺を評価し、結果を左辺に代入するという挙動をします。