carrierwave が利用されている箇所で、webmockを利用してstub化すると、指定していないIPアドレスへのリクエストをしてしまう。
Failure/Error:... WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: GET http://23.215.0.138/test.png with headers{'Accept'=>'*/*','Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3','Host'=>'example.com','User-Agent'=>'CarrierWave/3.0.5'} You can stub this request with the following snippet: stub_request(:get,"http://23.215.0.138/test.png"). with(headers: {'Accept'=>'*/*','Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3','Host'=>'example.com','User-Agent'=>'CarrierWave/3.0.5'}). to_return(status:200, body:"",headers: {})============================================================
これは、carrierwave がResolv.getaddresses
を利用して、指定された URL のドメイン名を IP アドレスとして解決するため。その IP アドレスを使ってリソースを取得しようとしている。
なので、Resolv.getaddresses
をmockして固定のIPを返す必要がある。
before
beforedoWebMock.enable!WebMock.stub_request(:get,"http://example.com/test.png") .to_return(body:File.new(Rails.root.join("spec/fixtures/test.png")),status:200,headers: {"Content-Type" =>"image/png" } )end afterdoWebMock.disable!end
after
beforedoWebMock.enable! allow(Resolv).to receive(:getaddresses).with("example.com").and_return(["5.5.5.5"])WebMock.stub_request(:get,"http://5.5.5.5/test.png") .to_return(body:File.new(Rails.root.join("spec/fixtures/test.png")),status:200,headers: {"Content-Type" =>"image/png" } )end afterdoWebMock.disable!end
Gemのバージョンアップをする場合に、ある特定のGemのPatchのみを最新にしたい場合がある。よくその方法を忘れるのでメモしておく。
$ bundle update{gem名}--conservative--patch
オプションについては以下を参照する。
CircleCIで、
...commands:setup:steps:-run:name:"apt-get install -y"command: | sudo apt update -y sudo apt-get install -y --fix-missing pkg-config imagemagick libmagick++-dev p7zip-full...
を最初に実行してパッケージのインストールをしていた。
先日の archive.ubuntu.com の障害以降、archive.ubuntu.com への接続が不安定になった。
https://status.canonical.com/ をみると正常に稼働している。世間的にも大きな問題にはなっていないが、なぜかCIで並列実行しているといくつかのJobで、以下のようなエラーとなり正常に終わらずに困った。
sudo apt update-ysudo apt-get install-y--fix-missing pkg-config imagemagick libmagick++-dev p7zip-fullGet:1 https://download.docker.com/linux/ubuntu jammy InRelease[48.8 kB]Get:2 http://archive.ubuntu.com/ubuntu jammy InRelease[270 kB] Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease[128 kB](中略)E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/libw/libwmf/libwmf-0.2-7_0.2.12-5ubuntu1_amd64.deb403 Forbidden[IP:185.125.190.8380]E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/libw/libwmf/libwmf-dev_0.2.12-5ubuntu1_amd64.deb403 Forbidden[IP:185.125.190.8380]E: Sub-process /usr/bin/dpkg returned an error code(1)Exited with codeexitstatus100
色々と試したが、結局↓のようにして解消をした。
sudosed-i.org-e's|archive.ubuntu.com|ubuntutym.u-toyama.ac.jp|g' /etc/apt/sources.listsudo apt update-ysudo apt-get install-y--fix-missing pkg-config imagemagick libmagick++-dev p7zip-full
ただ根本的な原因等は依然として不明のままなので、気になっている。
Rails のcomposed_of
の使い方をメモしておく。
巷にはcomposed_ofの説明がたくさんある。しかし自分が調べてもサクッと分からず、自前で実装して確認したことを残しておく。
composed_of
にする対象のカラムはjson
型class_name
のValueObject(モデル)にインナークラスを利用する場合には、class_name: "ExternalSetting::ServiceConfig"
のように指定することで利用できる。mapping
にはマッピングをしたい[%w(当該モデルのメソッド名 class_nameで指定したValueObjectのメソッド名), ...
で指定する# == Schema Information## Table name: external_settings## id :bigint not null, primary key# external_service :integer default("default_setting"), not null# service_config :json# created_at :datetime not null# updated_at :datetime not null#classExternalSetting <ApplicationRecord composed_of(:service_config,class_name:"ExternalSetting::ServiceConfig",mapping: [%w(external_service service),%w(service_config config)],allow_nil:true ) enumexternal_service: {default_setting:0 }classServiceConfigattr_reader:service,:configDefaultConfig =Struct.new(:usase)dodeffoo? usase ==:fooend ....enddefinitialize(external_service, service_config)@service = external_service.to_i@config = service_configif service ==ExternalSetting.external_services[:default_setting]@default_setting_config =DefaultConfig.new(get_value(:usase))endendprivatedefget_value(key) config.present? && config[key]endendend
config = {usase::foo }external_setting =ExternalSetting.firstservice_config =ExternalSetting::ServiceConfig.new(external_setting.external_service, config)external_setting.service_config = service_configexternal_setting.saveexternal_setting.service_config.default_config.foo?
AWS CloudTrailからSession Managerでログインした内容をAWSCLIで取得する方法をメモする。
Session Manager でログインをすると、StartSession
というイベントになる。aws cloudtrail
コマンドでStartSession
のイベントを取得して、レスポンスからjq
で 時刻、ユーザー名、インスタンスIDを出力している。
$ aws cloudtrail lookup-events--lookup-attributesAttributeKey=EventName,AttributeValue=StartSession | jq-r'.Events[] | "\(.EventTime) \(.Username) \(.CloudTrailEvent | fromjson | .requestParameters.target)"'
2025-02-12T17:18:34+09:00 user_a i-0123456789a1b23e4562025-02-12T14:34:15+09:00 user_a i-0123456789a1b23e4562025-02-12T10:42:11+09:00 user_a i-0123456789a1b23e4562025-02-12T10:41:36+09:00 user_a i-0123456789a1b23e4562025-02-07T15:14:50+09:00 user_a i-0123456789a1b23e456
組織再編があった。まだ完全移籍ではなく2ヶ月ほど現チームと新チームの半々の状態で働くことになっている。新チームにジョインして1週間時点での状況と考えを残しておく。
異動先チームは、様々な事情から2ヶ月ほどメンバー1名で運用保守と開発をしていた。そこに自分がジョインして2名体制で開発をすることになった。
異動前のチームでは(なんちゃってではあるが)スクラム開発をしていた。それなりに良い循環が出来ていたので新たなチームでも採用したいと考えていた。
まず、スクラムがマッチするかどうか、エッセンシャル スクラムで紹介されているクネビン(カネヴィン)フレームワーク で考えてみる。
ざっくりと内容を抜粋すると以下のような内容になる。
クネビンフレームワークに当て嵌めて考えると、「複雑な領域」になりスクラムにマッチしていそう。
成功した事例を、どんな環境にも柔軟に合わせて再度成功させることが出来るような、再現性が高い人間になりたい。
異動前のチームでは、品質が高く一定の頻度でリリースをする安定した開発が出来るチームへとリード出来た。
前提や環境が全く違うが、異動先のチームでもその再現をしていきたい。
Pull Requestのレビュー指摘を修正した後に、コメントで修正したコミットのハッシュを記載している。コピーするのが手間なので、コマンドでの手順をメモしておく。
環境はMac
$ git log -N --pretty=format:"%H %s"
$ git show --pretty=format:"%H" --no-patch | pbcopy
$ git show HEAD~N --pretty=format:"%H" --no-patch | pbcopy
$ git log-3--pretty=format:"%H %s"7fe68ebba167b4927bcd0636cc39379ca4e28fc2 :add: foo5efda28a322259427ff676e8d7f976a686af5479 :add: barb7d7fdd2b472c008de448ceb7c94be8695dc4e0b :update: baz
$ git show--pretty=format:"%H"--no-patch | pbcopy
$ git show HEAD~3--pretty=format:"%H"--no-patch | pbcopy
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。