問題タブ [railtie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1372 参照

ruby-on-rails - Rails イニシャライザの読み込み順序の制御 (新しい Rails 初期化フックが必要になる可能性があります)

OmniAuth を使用する Rails エンジンを構築しています。OmniAuth はいくつかのミドルウェアを Rails ミドルウェア スタックに追加する必要があり、OmniAuth によると、これを行うには初期化子で行う方法が推奨されています。試してみたところ、Rails アプリの起動時に読み込まれるイニシャライザーを gem 内に作成することに成功しました。今、私は自分の宝石にいくつかの構成オプションを追加しようとしています。宝石の初期化子が機能する前に、宝石のユーザーが別の初期化子を作成して宝石を構成できるようにしたいと考えています。

私が発見したのは、すべてのエンジン内の初期化子が最初にロードされることです。次に、Rails アプリ内の初期化子が読み込まれます。読み込み順序を制御できるような方法でイニシャライザに名前を付けたいと思っていましたが、Rails アプリのイニシャライザは依然として gem のイニシャライザの後に処理されます。これは私には完全に理にかなっていますが、初期化子のロード順序の問題が残ります。Rails アプリは最後に実行されるため、gem を構成する機会が与えられるまでに、gem は既に作業を完了しています。

次に考えたのはafter_initialize、エンジンの Railtie 内でコールバックを使用することでした。ほとんどの状況ではこれでうまくいくかもしれませんが、この特定のユース ケースでは役に立ちません。が呼び出されるまでafter_initializeに、ミドルウェア スタックは凍結され、変更できなくなります (これにより、ミドルウェア スタックを変更することだけを目的とするコードでは役に立たなくなります)。

現時点では、回避策は 1 つしかありません。Rails アプリは、application.rb 内で gem を構成する必要があるため、初期化子が実行される前に gem を構成します。

誰かが私が見逃しているものを見ていますか? 初期化子が処理された後 (ただし、Rails がブート プロセスのファイナライズを開始する前) に gem が何らかの作業を行う方法はありますか? そうでない場合、イニシャライザが処理されるとすぐに発火する別のフックが Rails にあると便利なようです。

0 投票する
1 に答える
1435 参照

ruby-on-rails - NameError: 初期化されていない定数 GemName::Rails::Railtie

アプリケーションの機能のチャンクをカプセル化する宝石を作成しています。それらの宝石は本質的にrakeタスクを実行しますが、タスクを実行するとbundle exec rake:assets:precompile、次のエラーが発生します

railtie に関連するモジュールのコードは次のとおりです。

このエラーが発生する理由はありますか?

0 投票する
3 に答える
1564 参照

ruby-on-rails - 非開発層でのメーラーのプレビュー

の下にいくつかのメーラーのプレビューがありspec/mailer/previewsます。developmentで、下のすべてのプレビューを表示できます/rails/mailers/。ただし、デフォルトでは、この機能は他の環境には存在しません。

私は環境でそれを有効にしたかったので、この投稿stagingからキューを取りましたここ.

次の変更を加えました-

config/routes.rb

config/environments/staging.rb

ただし、ステージングでは、ページを読み込もうとすると次のエラーが発生し/rails/mailersます-

奇妙なことに、そのファイルは確実に存在します。そして、ステージング時にオートロードパスを確認すると、そのファイルは間違いなく配列/リストにあります。

ここで何が起こっているのか、またはそのエンドポイントを公開するにはどうすればよいかについて何か考えはありますか?

ありがとう!

0 投票する
1 に答える
1336 参照

ruby-on-rails - TypeError をスローするすべてのテスト: nil から String への暗黙的な変換はありません

UPDATE 20180209: Rails 5.1.4 の初期インストール (ミニテスト 5.11.3 を含む) に付属する新しいダミー アプリを作成し、テストは問題なく完了しました。世界で何がこの問題を引き起こしているのかを絞り込めないかどうかを確認するために、gemfile を使って実験を続けます...

アイデアやヒントがあれば教えてください!


最近、コードベースの新しい部分のテストを開始しましたが、非常に重大な問題を発見しました。何らかの理由で、すべてのテストでタイトルのエラーがスローされるようになりました。トレースを調べると、何らかの理由で引用された名前/テストのタイトルが問題を引き起こしているようです。パスしたことがわかっているテストに戻って実行すると(確かに以前の gem バージョンでは)、残念ながら、以下の User モデルで示すように、同じ結果が得られます。

RVM、Rails、Ruby を完全に削除して再インストールするなど、できることはすべて試しました。Minitest を 10.5.3 などの以前のビルドにバージョンアップしようとしましたが、まだうまくいきません。私はこれを修正するために一日のほとんどを費やしました。私は頭がいっぱいで、必死に助けが必要です! 私はすべてのgemを明示的にバージョン保護する必要があるという難しい方法を学びました;)

前もって感謝します!さらにファイル/スニペットを含める必要がある場合はお知らせください。スケジュールが許す限り、できれば 24 時間以内にご質問にお答えできるよう最善を尽くします。

返されたトレース:

エラー: UserTest#test_should_be_valid: TypeError: nil から String への暗黙的な変換はありません

/home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_should_be_valid' for class Minitest::Result' (NameError) from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:informat_rerun_snippet' from /home/blake' /home/blake/.rvm/gems/record' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:803:inからの /.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:23:in block in record' ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:802:in each' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:802:inrecord' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest- 5.11.3/lib/minitest.rb:334:inrun_one_method' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:321:inブロック (2 レベル) in run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/ minitest.rb:320:in each' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:320:inblock in run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:360:inon_signal' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:347:inwith_info_handler' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:319:in run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:inrun' from /home/blake/.rvm/gems /ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:159:in block in __run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:159:inmap' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest -5.11.3/lib/minitest.rb:159:in __run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:136:inrun' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:63 : block in autorun' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:171:in/home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:171 からのフォーク内: serve' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:141:in/home/ からの実行中のブロック内blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:135:in loop' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:135:inrun' from /home/blake/.rvm/gems/ruby-2.4 .1@land_app/gems/spring-2.0.2/lib/spring/application/boot.rb:19:の<top (required)>' from /home/blake/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:inrequire' from /home/blake/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in require' from -e:1:in'

これは、以前に問題が発生したことのない、かなり標準的なユーザー モデル テストからのものです...

user.rb

テスト/user_test.rb

test_helper.rb

私は現在走っています

  • ルビー 2.4.1
  • レール 5.1.4

私の宝石リストは次のとおりです。