タグ付けされた質問 「ruby」

Rubyは、マルチプラットフォームのオープンソースの動的オブジェクト指向インタープリタ言語であり、1995年に松本幸宏(Matz)によって作成されました。[ruby]タグは、Ruby言語に関連する質問(構文やライブラリなど)を対象としています。Ruby on Railsの質問は[ruby-on-rails]でタグ付けする必要があります。

6
Rubyで<<を使用してハッシュにキーと値のペアを追加します
Rubyでは、&lt;&lt;:を使用して既存の配列に値を追加できます。 a = [] a &lt;&lt; "foo" しかし、既存のハッシュにキーと値のペアを追加することもできますか? h = {} h &lt;&lt; :key "bar" 私はあなたができることを知っています: h[:key] = "" h[:key] &lt;&lt; "bar" しかし、それは私が望んでいないことです。 ありがとう。
80 ruby  hash 

5
Rubyでモジュールのインスタンス変数を初期化するにはどうすればよいですか?
インスタンス変数を使用したいモジュールがいくつかあります。現在、次のように初期化しています。 module MyModule def self.method_a(param) @var ||= 0 # other logic goes here end end また、initメソッドを呼び出してそれらを初期化することもできます。 def init @var = 0 end しかし、これは私が常にそれを呼ぶことを忘れないことを意味するでしょう。 これを行うためのより良い方法はありますか?

3
Ruby 2.7.0でRailsの警告メッセージを修正する方法
誰かがこの問題を解決しましたRuby 2.7.0か? rbenvRuby v2.7.0 を使用してインストールし、次にを使用してRailsプロジェクトを作成しましたRails v6.0.2.1。 現在のところ、 rails s rails s -u puma rails s -u webrick サーバーは稼働しており、サイトは提供されていConsoleますが、ログに2つの警告メッセージが表示されます。 local:~/rcode/rb27$ rails s =&gt; Booting Puma =&gt; Rails 6.0.2.1 application starting in development =&gt; Run `rails server --help` for more startup options .rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is …

4
未定義のメソッド「transform_keys」がSidekiq Webをロード
gemを更新した後、sidekiq Webサイトが読み込まれず、次のエラーが発生します。 NoMethodError (undefined method `transform_keys' for &lt;ActionDispatch::Request::Session:0x00005568df2a8710&gt;): 更新された宝石は次のとおりです。 selenium-webdriver 3.142.7 rack-protection 2.0.8.1 mime-types 3.3.1 mini_magick 4.10.1 image_processing 1.10.3 groupdate 4.3.0 friendly_id 5.3.0 faraday 0.17.3 http 4.3.0 public_suffix 4.0.3 rack 2.1.1 crass 1.0.6 i18n 1.7.1 minitest 5.14.0 rubyバージョン:ruby 2.6.0p0(2018-12-25リビジョン66547)[x86_64-linux] 完全なエラーメッセージ

2
RubyでRegexpオブジェクトが「偽物」と見なされるのはなぜですか?
Rubyには「真実性」と「虚偽性」という普遍的な考え方があります。 Rubyには、ブールオブジェクト用に2つの特定のクラスがTrueClassありFalseClass、シングルトンインスタンスはそれぞれ特殊変数trueとfalseで示されます。 ただし、真実性と偽造性はこれら2つのクラスのインスタンスに限定されず、概念は普遍的であり、Rubyのすべてのオブジェクトに適用されます。すべてのオブジェクトは真実か偽物です。ルールは非常に簡単です。特に、2つのオブジェクトだけが偽物です: nilシングルトンインスタンスNilClassと false、のシングルトンインスタンス FalseClass 他のすべてのオブジェクトは真実です。これには、他のプログラミング言語で偽物と見なされるオブジェクトも含まれます。 、Integer 0 、Float 0.0 空、String '' 空、Array [] 空、Hash {} これらのルールは言語に組み込まれており、ユーザーが定義することはできません。to_bool暗黙的な変換やそれに類似したものはありません。 ISO Ruby言語仕様からの引用は次のとおりです。 6.6ブール値 オブジェクトは、真実のオブジェクトまたは偽のオブジェクトに分類されます。 falseとnilのみが偽りのオブジェクトです。falseは、false式が評価されるクラスのインスタンスFalseClass(15.2.6を参照)のみです(11.5.4.8.3を参照)。nilは、クラスの唯一のインスタンス(15.2.4を参照)であり、nil式が評価されます(11.5.4.8.2を参照)。NilClass falseおよびnil以外のオブジェクトは、trueishオブジェクトに分類されます。trueは、true式が評価されるクラスの唯一のインスタンスTrueClass(15.2.5を参照)です(11.5.4.8.3を参照)。 実行可能なRuby / Specは同意するようです: it "considers a non-nil and non-boolean object in expression result as true" do if mock('x') 123 else 456 end.should == 123 end これらの2つの情報源によると、私はRegexpsも真実であると想定していますが、私のテストによると、そうではありません。 …
16 regex  ruby  boolean  jruby  yarv 


1
呼び出されたメソッド `… 'はここで定義されています
Ruby 2.7がリリースされたばかりで、「位置引数とキーワード引数の分離」に関するこれらの新しい警告が付属しています(リリースポストを参照)。私はそれで遊んでいて、理解できない別の警告があることを発見しました。 例: def multiply(x:, y:) x * y end args = { x: 2, y: 3 } multiply(args) # ./warning.rb:7: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call # ./warning.rb:1: warning: The called method `multiply' is defined here サポート終了についての最初の警告は明らかだと思いますが、2番目の警告The …
13 ruby 

4
#<Bundler :: RubygemsIntegration:0x00005633f09a9000>の未定義のメソッド `plain_specs '(NoMethodError)
私は自分の仕事にあるプロジェクトをプルしました。実行しようとするrails db:migrateと、ターミナルから「Bundler 2」をインストールするように要求されたので、それを実行しました。 今、私がやろうとしたときにrails db:migrate、次のエラーが発生しました: /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/rubygems-bundler-1.4.5/lib/rubygems-bundler/noexec.rb:84:in `setup': undefined method `plain_specs' for #&lt;Bundler::RubygemsIntegration:0x00005633f09a9000&gt; (NoMethodError) from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/rubygems-bundler-1.4.5/lib/rubygems-bundler/noexec.rb:124:in `check' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/rubygems-bundler-1.4.5/lib/rubygems-bundler/noexec.rb:131:in `&lt;top (required)&gt;' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:168:in `require' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:168:in `rescue in require' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:178:in `require' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/rubygems-bundler-1.4.5/lib/rubygems_executable_plugin.rb:4:in `block in &lt;top (required)&gt;' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/executable-hooks-1.5.0/lib/executable-hooks/hooks.rb:50:in `block in run' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/executable-hooks-1.5.0/lib/executable-hooks/hooks.rb:49:in `each' from /home/acartesc/.rvm/rubies/ruby-2.4.3/lib/ruby/gems/2.4.0/gems/executable-hooks-1.5.0/lib/executable-hooks/hooks.rb:49:in `run' from /home/acartesc/.rvm/gems/ruby-2.4.3/bin/ruby_executable_hooks:10:in …

3
fastlaneの更新に失敗:signetにはRubyバージョン> = 2.4.0が必要
fastlaneを更新できません。 実行するfastlane update_fastlaneと、次のエラーが発生します。 ERROR: Error installing fastlane: signet requires Ruby version &gt;= 2.4.0. 実行するruby -vと、ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18] fastlaneバージョン2.28.3で立ち往生しています。fastlaneを再インストールしようとしましたが、それでも同じエラーが発生します。 この問題の原因は何ですか?どうすればこれを解決できますか?
13 ruby  fastlane 

3
切り替えるために複数のデータベース接続プールをレールに置くことは可能でしょうか?
少し背景 私は何年もマルチテナントアプリを実行するためにApartment gemを使用しています。最近、データベースを別のホストにスケールアウトする必要が出てきました。dbサーバーはこれ以上追いつくことができません(読み取りと書き込みの両方が多すぎる)-そしてはい、ハードウェアを最大にスケールしました(専用)ハードウェア、64コア、RAID 10の12個のNvm-eドライブ、384Gb RAMなど)。 これはnumber-of-tenants、アプリケーションコードを変更することなく、最大で倍の容量を実現するための「シンプル」で効率的な方法であるため、このテナントごと(1テナント= 1データベース接続構成/プール)を使用することを検討していました。 現在、私はレール4.2気圧を実行していますが、すぐに5.2にアップグレードします。rails 6はモデルごとの接続定義のサポートを追加していることがわかりますが、20のテナントごとに完全にミラーリングされたデータベーススキーマがあるため、実際には必要ありません。通常、リクエストごと(ミドルウェア内)またはバックグラウンドジョブごと(sidekiqミドルウェア)に「データベース」を切り替えますがsearch_path、Postgresqlでを設定するだけで実際の接続は実際には変更しないので、これは現在のところ簡単で、Apartment gemで処理されます。テナントごとのホスティング戦略に切り替える場合、リクエストごとに接続全体を切り替える必要があります。 質問: 私ActiveRecord::Base.establish_connection(config)はリクエストごと/バックグラウンドジョブを実行できることを理解しています-しかし、私も理解しているように、まったく新しいデータベース接続のハンドシェイクが作成され、新しいDBプールがRailsで生成されます-正しいですか?これは、アプリケーションへのすべてのリクエストでこの種のオーバーヘッドを発生させるパフォーマンス自殺になると思います。 したがって、たとえば複数(合計20)のデータベース接続/プールを最初から(たとえば、アプリケーションの起動時に)事前に確立するレールのオプションが表示され、リクエストごとにそれらのプールを切り替えることができるかどうか疑問に思いますか?そのため、彼はdb接続がすでに作成され、使用できるようになっています。 これらはすべて単に貧しい貧しいアイデアですか?代わりに別のアプローチを探す必要がありますか?たとえば、1つのアプリインスタンス= 1つの特定のテナントへの1つの特定の接続。または、他の何か。

5
2つの画像のトリミング/比率が少し異なっていても、2つの画像が「同じ」であることをどのように検出しますか
2つの異なる画像があります。 100px または400px そして 幅100px または400px あなたが見ることができるように、2つは人間の観点から明らかに「同じ」です。次に、それらが同じであることをプログラムで検出します。私は次のrmagickように呼ばれるruby gemを介して画像マジックを使用しています: img1 = Magick::Image.from_blob(File.read("image_1.jpeg")).first img2 = Magick::Image.from_blob(File.read("image_2.jpeg")).first if img1.difference(img2).first &lt; 4000.0 # I have found this to be a good threshold, but does not work for cropped images puts "they are the same!!!" end これは、同じ比率/トリミングを持つ画像に適していますが、トリミングがわずかに異なり、同じ幅にサイズ変更されている場合は理想的ではありません。 トリミングが異なる画像にそれを行う方法はありますか?私は次のようなことを言える解決策に興味があります。1つの画像が他の画像の内部に含まれ、どこかをカバーしています(例:画像の90%)。 PS。それが役立つ場合は、画像をより高い解像度で取得できます(例:ダブル)

5
クラスメソッドのalias_methodはありますか?
次のクラスを考えてみましょう: class Foo def an_inst_method 'instance method' end def self.a_class_method 'class method' end alias_method :a_new_inst_method, :an_inst_method end これは問題ではなく、問題なく呼び出すことができますFoo.new.a_new_inst_method。 のようなクラスメソッドFoo.add_widget(*items)とエイリアスを設定して、次のようなことができるようにしたいと思います。 Foo.add_widget 'item1' Foo.add_widgets 'item2', 'item3' 以下のようなので、基本的には「ルビースタイル」を持っている1.minuteと2.minutes私はエイリアスにしたいので、Foo.add_widgetその呼び出しFoo.add_widgetsの呼び出しとまったく同じ方法を。私はそれをラップできることを知っていますが、私はこれをよりきれいな方法で行うことができるはずだと感じています。 次のようなことを試してみてください。 class Foo def an_inst_method 'instance method' end def self.a_class_method 'class method' end alias_method :a_new_inst_method, :an_inst_method alias_method :a_new_class_method, :a_class_method end ただし、次のエラーが発生します。 NameError (undefined method `a_class_method' …

1
クラスの作成後にrubyが3つのオブジェクトを作成するのはなぜですか?
Rubyのメタクラスについて勉強していました。私はメタクラスが何であるかがうまく記述されているこの答えを読みました。クラスが作成されると、2つのオブジェクトが作成されます。それは理解できます。1つはクラス自体用で、もう1つはメタクラス用です。しかし、自分で試してみると、3つのオブジェクトが作成されていることがわかります。 puts "Before Class Creation object count - #{ObjectSpace.count_objects[:T_CLASS]}" class Test def self.foo # test_singleton p 'Printed from method #foo' end def bar # test p 'Printed from method #bar' end end puts "After Class Creation object count - #{ObjectSpace.count_objects[:T_CLASS]}" ############### Before Class Creation object count - 949 After Class …

1
別のバージョンが必要な場合に、最新バージョンのgemを必要とするバンドルの問題を修正するにはどうすればよいですか?
私はこれで2週間近く頭を悩ませてきました。rbenvがインストールされたUbuntu 14.04サーバーを使用して、いくつかの異なるRails Webサイトを実行しています。それらの一部は古いバージョンのRailsにあり、一部は最新バージョンにあります。 特に2つのWebサイトがあり、どちらも異なるバージョンのpuma_worker_killerが必要です。1つは0.1.0が必要で、もう1つは0.1.1が必要です。これらのWebサイトは両方ともRuby 2.5.3を使用しています。 サーバーを起動するとRAILS_ENV=dev3 bundle exec pumactl -F ./config/puma.rb start、ログに次のエラーが表示され、Webサイトがハングします。 You have already activated puma_worker_killer 0.1.1, but your Gemfile requires puma_worker_killer 0.1.0. Prepending `bundle exec` to your command may solve this. (Gem::LoadError) 最初に〜/ .rbenvではなく〜/ .gemにgemをインストールしていたため、rbenvに問題があるのではないかと思ったので、すべてのルビーを〜/ .gemに入れて、正しい場所に新しくインストールしましたrbenvフォルダーを使用bundle installしても、同じ問題が引き続き発生します。 この時点で、私はこの問題についてオンラインで広範な調査を行ったことを明確にしたいと思います。これを解決するために私は多くのことができることを知っています。 バージョンとを変更するだけで十分bundle update puma_worker_killerです。 また、gem uninstall puma_worker_killer0.1.1を実行して選択することで最新バージョンを削除できることも知っていますが、これは他のWebサイトへの依存関係が満たされないことを意味します。 バンドラーのソースコードを掘り下げて調べたところ、次のコード行が原因であることがわかります。 return if activated_spec.version …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.