我看過一些帖子,其中的建議是config.after_initialize在config/application.rb檔案中創建一個初始化程式或創建一個塊;但是,這對我來說不起作用,因為我依賴于 Rails 憑據。
例如,我有一個名為的類SlackBot,它基本上向我們的 slack 通道發送訊息。我想創建一個初始化程式,在rails s命令運行后發送一條訊息,但config.after_initialize實際上并沒有作業,因為SlackBot該類從Rails.application.credentials
嘗試執行此操作時出現以下錯誤:
ubuntu@bf29b8edfeea:~/myapp$ rails s --binding 0.0.0.0 -p 80
=> Booting Puma
=> Rails 6.1.4.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Exiting
/usr/local/bundle/gems/activesupport-6.1.4.4/lib/active_support/message_verifier.rb:176:in `verify': ActiveSupport::MessageVerifier::InvalidSignature (ActiveSupport::MessageVerifier::InvalidSignat
ure)
from /usr/local/bundle/gems/activesupport-6.1.4.4/lib/active_support/message_encryptor.rb:154:in `decrypt_and_verify'
from /usr/local/bundle/gems/activesupport-6.1.4.4/lib/active_support/messages/rotator.rb:22:in `decrypt_and_verify'
from /home/ubuntu/myapp/app/helpers/user_helper.rb:19:in `decrypt_data'
我可以擺脫這個錯誤的唯一方法當然是洗掉自定義初始值設定項。
有沒有一種方法可以在rails 完全初始化之后呼叫初始化程式或方法,也許作為運行的最后一步?
uj5u.com熱心網友回復:
根據Rails 官方參考的The Rails Initialization Process,初始化順序中config/environment.rb最后一個要執行的檔案是(注意雖然參考說明最后一個是config/application.rb,但該檔案應該在前面的程序中默認為require -d ) .
在 Rails 6(或者更早的版本?)中,最后一行config/environment.rb是
Rails.application.initialize!
因此,如果您在檔案中的行之后撰寫自己的陳述句,那么在執行陳述句時config/environment.rb您的 Rails 應用程式必須已經完全初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404411.html
標籤:
