wancoro blog

学んだことをアウトプットしていきたいと思います

bundle installでグループ内にあるGemをインストールしたい[備忘録]

bundle install --without ${GROUP} を実行すると、次回以降に bundle install をするときも、前回の --without の設定を引き継いでしまうらしい。
(bundle configが書き換えられてしまうと予想)

なので、 --without ${GROUP} で除外したグループのGemをインストールしたい場合、bundle configを書き換える必要がある

(例)testグループのGemをインストールしたい場合

# Gemfile

group :test do
  gem 'rspec-rails'
end
$ vi .bundle/config

---
BUNDLE_PATH: "./vendor/bundle"
BUNDLE_FROZEN: "true"
BUNDLE_WIHTOUT: "test" # この行を削除

これでbundler installを実行すると、全てのグループのGemがインストールできる

Sprockets::FileNotFound: couldn't find file 'font-awesome' with type 'text/css'

事象

Gemを追加し、 asset:precompile を実行したところ上記エラー。

追加したGem
https://github.com/bokmann/font-awesome-rails

application.css に追記した *= require font-awesome を探しているが、
ファイルが見つからずにエラーになっているっぽい。

原因

Gemを書いた場所が問題だった。
group の中にGemを追加していた。

 group :development, :test do
    gem 'font-awesome-rails'
 end

group の外に出すことで解決した。

 gem 'font-awesome-rails'
 
 group :development, :test do 
 end

備考

正常にコンパイルされると、public/assets 配下にコンパイル済みのファイルが作成される

 $ ls public/assets
font-awesome-xxx.css
font-awesome-xxx.css.gz
fontawesome-webfont-xxx.woff2
fontawesome-webfont-xxx.eot
fontawesome-webfont-xxx.eot.gz
fontawesome-webfont-xxx.ttf
fontawesome-webfont-xxx.gz
fontawesome-webfont-xxx.svg
fontawesome-webfont-xxx.svg.gz
fontawesome-webfont-xxx.woff

また、 public/assets に配置されたものについては、HTTPで接続することができる

http://localhost:8080/assets/font-awesome-xxx.css

bundle installでGemfileが作成されない

やりたいこと

GemfileにGemを追加し、Gemfile.lockを更新したい。

事象

Gemfileを更新した後 bundle install を実行すると以下のエラーが表示され、Gemfileが更新されない。

 You are trying to install in deployment mode after changing
 your Gemfile. Run `bundle install` elsewhere and add the
 updated Gemfile.lock to version control.
 
 If this is a development machine, remove the Gemfile freeze 
 by running `bundle config unset deployment`.

bundler -v を実行したところエラーが出た。

 Traceback (most recent call last):
         2: from /home/vagrant/.rbenv/versions/2.6.5/bin/bundler:23:in `<main>'
         1: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems.rb:296:in `activate_bin_path'
 /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems.rb:277:in `find_spec_for_exe': Could not find 'bundler' (2.0.1) required by your Gemfile.lock. (Gem::GemNotFoundException)
 To update to the latest version installed on your system, run `bundle update --bundler`.
 To install the missing version, run `gem install bundler:2.0.1`

解決策

エラーメッセージ2 に書かれている通り、 gem install bundler:2.0.1 を実行。

再度 bundle install をすると、同じようなエラーが出た。

 You are trying to install in deployment mode after changing
 your Gemfile. Run `bundle install` elsewhere and add the
 updated Gemfile.lock to version control.
 
 If this is a development machine, remove the Gemfile freeze 
 by running `bundle config --delete deployment`.

.bundle/config を見てみる。

 $ cat .bundle/config
 ---
 BUNDLE_DEPLOYMENT: "true"
 BUNDLE_PATH: "./vendor/bundle"
 BUNDLE_FROZEN: "true"
 BUNDLE_WITHOUT: "development:test"

エラーメッセージ書かれている通りbundle config --delete deployment を実行。
また、 BUNDLE_FROZENtrue の場合、Gemfileを変更できなくなるようなので
bundle config set frozen false も実行しておく。
http://ruby.studio-kingdom.com/bundler/bundle_config/

コマンド実行後の .bundle/config

 $ cat .bundle/config
 ---
 BUNDLE_PATH: "./vendor/bundle"
 BUNDLE_WITHOUT: "development:test"

これで bundle instal が成功するようになった!

しかし、そもそもなぜ bundler -vでエラーが出たのかは謎。

Jenkins Pipelineで Performance Pluginを使ってみる

はじめに

Jenkins初心者な自分がパイプラインを書くことになったので、
Performance Pluginを使う場合の書き方、Jenkins操作方法を記します。
JMeterでのjmxファイルの作成方法は記しません。

Performance Pluginを使用するに至った経緯

今回はJenkinsからJMeterを実行し、出力レポートを過去の結果と比較するため
Performance Pluginを使うことになりました。

環境情報

事前準備

  • jmxファイルを用意する
  • Jenkinsのダッシュボードを用意する

Jenkinsfile書き方

pipeline {
    agent any // 無いと怒られた
    stages {
        stage('Performance Test') {
            steps {
                bzt 'jmeter-example.jmx'  // 実行するjmxのファイルパスを指定
            }
        }
​
        stage('Report') {
            steps {
                perfReport '**/*.jtl' // 出力するレポートの形式を指定
            }
        }
    }
}

stepの詳細は以下ドキュメントを参照してください。

www.jenkins.io

Pipeline実行方法

Piplelineジョブの作成

今回はJenkinsのGUIからパイプラインのジョブを作成します。 f:id:wancoromochi:20210108095507p:plain 新規ジョブ作成→ジョブに名前をつける→パイプラインを選択→OKを押下

f:id:wancoromochi:20210108095711p:plain パイプラインタブを選択→スクリプトを貼付→保存を押下

作成したジョブを実行

f:id:wancoromochi:20210108095927p:plain Build nowを押下

f:id:wancoromochi:20210108100204p:plain ビルドが成功すると、Performance Trendから実行結果のグラフが確認できます。

参考情報

Performance Pluginのインストール方法はこちらを参考にさせていただきました。 blue-38.hatenablog.com

has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Aサーバで呼び出したJavascriptからBサーバのHTMLファイルを呼び出ししようとすると、エラーが出た

*** has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

CORSとは?

ajax通信をするために、安全性を保つため、
リソースの取得先をアプリケーション呼び出し元と同一のオリジン(ドメインのこと?)に限定するらしい。
それ以外のオリジンから取得したい場合はCORSの設定がいるとのこと。

developer.mozilla.org

対処方法

レスポンスを返却する側のヘッダーに以下を追加する

Access-Control-Allow-Origin: <origin-url>

developer.mozilla.org

DockerにSSHできなかった問題を解決した話

事象

[Docker入門]コンテナにsshでアクセスするための設定メモ - Qiita
上記ドキュメント通りにdockerを起動しても、ホストからSSH接続ができない。
途中でConnection reset by peerとエラーが出てしまう。

別の事象

docker build時に、apt実行に失敗しtemporary failure resolvingとエラーが出ていた。 解消するために、--network=hostオプションをつけていた。

解決策

ダメもとで以下ドキュメントのDockerデーモンのオプションに「--dns」を指定するを試してみたら、SSHできるようになった。
docker image build時に、DNSの設定をなんとかしたい - CLOVER🍀