IT分からんわ~_~;

IT色々お勉強中のブログ

RubyGemsの複数の脆弱性 Multiple vulnerabilities in RubyGems

Multiple vulnerabilities in RubyGems

Rubyに入っているRubyGemsには、複数の脆弱性が存在します。それはRubyGemsの公式ブログで報告されています。

詳細 次の脆弱性が報告されています。

  • ルート以外のシンボリックリンクされたベースディレクトリに書き込むときに、pathトラバーサルを防ぐ。

  • 安全でないObject逆シリアル化の可能性を修正します。gem所有者の脆弱性

  • tarヘッダーの8進フィールドを厳密に解釈します。

  • パッケージに重複ファイルが存在する場合にセキュリティエラーを発生させます。

  • specホームページ属性にURL検証を強制します。

  • gemサーバー経由で表示された場合、ホームページ属性のXSS脆弱性を緩和します。

  • インストール時のpathトラバーサルの問題を防止します。

Rubyユーザーは、次のいずれかの回避策をできるだけ早く実行することを強く推奨します。

影響を受けるバージョン Ruby 2.2シリーズ

  • :2.2.9以前 Ruby 2.3シリーズ

  • :2.3.6以前 Ruby 2.4シリーズ

  • :2.4.3以前 Ruby 2.5シリーズ

  • :2.5.0以前 prior to trunk revision62422以前

回避策 RubyGems 2.7.6以降には脆弱性に対する修正が含まれているため、RubyGemsを最新バージョンにアップグレードしてください。

gem update --system

RubyGemsをアップグレードできない場合は、回避策として次のパッチを適用できます。

https://bugs.ruby-lang.org/attachments/download/7030/rubygems-276-for-ruby22.patch

https://bugs.ruby-lang.org/attachments/download/7029/rubygems-276-for-ruby23.patch

https://bugs.ruby-lang.org/attachments/download/7028/rubygems-276-for-ruby24.patch

https://bugs.ruby-lang.org/attachments/download/7027/rubygems-276-for-ruby25.patch

How Fast is Ruby 2.5.0?

engineering.appfolio.com

11月には、Ruby 2.5.0プレビュー1の速度結果を掲載しました。 Ruby 2.4よりはるかに高速でしたが、これは少し失望しました。 しかし、1つの非常に重要なパフォーマンスパッチが終了する前にリリースしたため、最終的な速度に大きな違いが生じました

どれぐらいの差か?さぁ見てみましょう!

グラフを見たいだけです、同じ方法だと私は言い切れます。 これは素晴らしいスタートです.Rails Ruby Benchのトータルタイムです。 これは、談話(Rails)要求の混在を大規模な並行サーバー経由でプッシュするのにかかる時間を測定します。

悪くない。数字とパーセントの表のように見えるのは何ですか?

Percentile Ruby 2.4.3 Ruby 2.5.0 % Faster

0% 29.17 26.99 7.5%

10% 32.25 30.73 4.7%

50% 33.98 32.39 4.7%

90% 35.15 33.37 5.1%

100% 36.77 35.62 3.1%

ここで興味深いのは、より高い(より遅い)runの方がスピードが遅くなっていることです。 ほぼすべてのスピードの違いがあるパフォーマンスパッチの珍しい性質のため、ほぼ確実です。 それはRubyバイトコード操作ごとに多かれ少なかれ一定のオーバーヘッドでした。より遅い実行にはそれぞれが長い(かなり可能性がある)命令がある場合は、パフォーマンスが低下すると予想されます。おおよそあなたがここに見るものです。

Ruby 2.5.0の方がずっと速いのですが、 「実行時間あたりのパーセンタイルではなく、スループットに答えようと思っています。だからスループットを見てみましょう:

Measurement | Ruby 2.4.3 | Ruby 2.5.0 | % Faster|

Mean Throughput | 170.6 | 179.3 | 5.1%|

Median Throughput| 171.0 | 179.6 | 5.0%|

どれくらい速くなる?大規模な並行Railsサーバーではスループットが5%向上します。友達に教えて!

それよりも速くすることはできますか? 確かに。小さくて速い操作で、Railsの要求が最大7.5%向上しました。一部のベンチマークではKoichiが最大12%速くなっています。

しかし簡単な答えのために、 "それは私のRailsアプリケーションをより速くするでしょうか?"はい。約5%速くなります。何かを壊すようなことはないかなり静かなアップグレードのために悪いことではありません。コードをスピードアップし、いくつかの素晴らしい機能を追加するだけです!

rubocopとの奮闘記録 途中

Use a guard clause instead of wrapping the code inside a conditional expression. 条件分岐のネストが深くなるのはダメ

bad

def hoge
   if boge? || kuzu?
    'sine'
   end
end

good

def hoge
    'sine' if boge? || kuzu?
end

Don't use parentheses around the condition of an if.

ifにカッコはいらんわ!

Favor a normal if-statement over a modifier clause in a multiline statement.

def create_transfer_request
      ContentDepositorChangeEventJob.perform_later(self,
                                                   'sample') if on_behalf_of.present?
    end

def create_transfer_request
      if on_behalf_of.present?
        ContentDepositorChangeEventJob.perform_later(self,
                                                     'sample')
      end
    end

Style/IfInsideElse: Style/IfInsideElse:

elseの中にif入れんならelsifにしろ

if hoge?
  action_b
else
  if hage?
    action_b
  else
    action_c
  end

if hoge?
  action_b
elsif hage?
    action_b
  else
    action_c
  end

Class: RuboCop::Cop::Style::ConditionalAssignment

is_push ? self.hoge = true : self.hoge = false

↓の方がイケてるっぽい
self.hoge = if is_push
                                     true
                                  else
                                     false
                                   end

Ruby on RailsによるJSON APIのシリアライズの高速化

英訳

Ruby on Railsアプリケーション向けの高速 JSON API gemのオープンソース・リリースを発表します。

  • Introduction

高速JSONAPIは、Active Model Serializer(AMS)が提供する主要な機能をすべて提供するとともに、 AMSよりも25倍高速というベンチマーク要件を満足しており、 スピードとパフォーマンスに重点を置いています。 このgemは、ルールとしてパフォーマンステストも実施します。 AMSは偉大なgemであり、fast_jsonapiは宣言の構文と機能について言及しています。 しかし、モデルに1つ以上のリレーションシップがある場合、AMSは遅くなり始めます。 これらのモデルでは複合ドキュメント、AKAサイドローディングはAMSをさらに遅くします。 UI上で無限のスクロールが必要になり、AMSの遅さがユーザーに見え始めます。

  • シリアル化を最適化するのはなぜですか?

JSON APIのシリアライゼーションは、よく実装された多くのRails APIのうち最も遅い部分の1つです。

AMSが提供する主要な機能をすべて高速で提供してみませんか?

  • 特徴:

    • アクティブモデルシリアライザに似た宣言構文
    • belongs_to、has_many、およびhas_oneのサポート
    • 複合文書のサポート(付属)
    • 複合ドキュメントの最適化されたシリアル化
    • キャッシング
    • Skylightインテグレーションによる計測(オプション)
  • Fast JSONAPIを使用してシリアライザを作成するにはどうすればよいですか?

Active Modelシリアライザは、シリアライザを宣言するのに馴染みのある方法を使います。 fast_jsonapiの宣言構文はAMSに似ています。

class MovieSerializer
   include FastJsonapi::ObjectSerializer
   attributes :name, :year
   has_many :actors
   belongs_to :owner, record_type: :user
   belongs_to :movie_type
end
  • アクティブモデルシリアライザと比較するとどれくらい早いですか?

性能テストでは、AMSと比較して25〜40倍の速度向上が見られ、かなり複雑なモデルでもシリアライズ時間は無視できます。 シリアライズされたレコードの数が増えると、パフォーマンスが向上します。

私たちを信じてください?ベンチマークテストは自分で実行できます。 readmeを参照してください。

  • 依存

JSON APIはanti-bikesheddingです。

  • Future Work

我々は、gemに多くの機能を追加する予定です。提案、改善、修正、追加テストを歓迎します。

vueファイルの置き場所を設定

vueファイルの置き場所を設定

app/javascript/srcの位置を@で示せるようにする

config/webpack/custom.js

const utils = require('./utils')

module.exports = {
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      vue$: 'vue/dist/vue.esm.js',
      '@': utils.resolve('../app/javascript/src')
    }
  }
}

vueはデフォルトでランタイム限定ビルド(されたVue.js)を読み込みます 完全ビルド(されたVue.js)を読み込むように変更するには上の修正が必要です。

aloerina01.github.io

itexplorer.hateblo.jp

config/webpack/utils.js

var path = require('path')

exports.resolve = function (dir) {
  return path.join(__dirname, '..', dir)
}

config/webpack/development.js

const environment = require('./environment')
const customConfig = require('./custom')
const utils = require('./utils')

const config = {
  devtool: '#cheap-module-eval-source-map'
}

const merged = merge(customConfig, config)
module.exports = merge(environment.toWebpackConfig(), merged)

エラーになるのでpackage.jsonに追加してyarn install

+++ b/package.json
@@ -4,9 +4,11 @@
     "coffeescript": "1.12.7",
     "vue": "^2.5.13",
     "vue-loader": "^13.7.0",
+    "vue-router": "^3.0.1",
     "vue-template-compiler": "^2.5.13"
   },
   "devDependencies": {
-    "webpack-dev-server": "^2.11.0"
+    "webpack-dev-server": "^2.11.0",
+    "webpack-merge": "^4.1.0"
   }
 }

rails側エラーにならないように

+++ b/config/environments/development.rb
@@ -1,6 +1,6 @@
 Rails.application.configure do
     # Verifies that versions and hashed value of the package contents in the project's package.json
-  config.webpacker.check_yarn_integrity = true
+  # config.webpacker.check_yarn_integrity = true