RubyGemsの複数の脆弱性 Multiple vulnerabilities in RubyGems
Multiple vulnerabilities in RubyGems
Rubyに入っているRubyGemsには、複数の脆弱性が存在します。それはRubyGemsの公式ブログで報告されています。
詳細 次の脆弱性が報告されています。
安全でない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?
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を参照してください。
- 依存
- 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)を読み込むように変更するには上の修正が必要です。
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