如何为 Heroku 部署定义 rails 常量 Mailer::ApplicationMailer?

How to define rails constant Mailer::ApplicationMailer for Heroku deploy?

我有一个 rails 应用程序正在崩溃,因为 ActionMailer 常量显然不存在或其他原因但确实存在。 这是我的 Heroku 日志:

2020-06-02T14:54:19.581698+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=beulah-ror-portfolio-1.herokuapp.com request_id=730c40fd-29b8-45f6-ac94-98839a66611a fwd="105.112.46.202" dyno= connect= service= status=503 bytes= protocol=http
2020-06-02T14:54:21.801858+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=beulah-ror-portfolio-1.herokuapp.com request_id=fe307ff5-6d4f-4305-a74d-54afeb92e3d6 fwd="105.112.46.202" dyno= connect= service= status=503 bytes= protocol=http
2020-06-02T14:54:35.626782+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=beulah-ror-portfolio-1.herokuapp.com request_id=ef7cd106-36d2-4a6e-93e3-aea874aa2c4d fwd="102.67.23.174" dyno= connect= service= status=503 bytes= protocol=http
2020-06-02T14:54:36.594530+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=beulah-ror-portfolio-1.herokuapp.com request_id=e6a8e65b-8aba-4165-aad8-890a2f505e82 fwd="102.67.23.174" dyno= connect= service= status=503 bytes= protocol=http
2020-06-02T14:56:05.955005+00:00 app[api]: Starting process with command `rails c` by user akibeulah@gmail.com
2020-06-02T14:56:20.095915+00:00 heroku[run.6268]: State changed from starting to up
2020-06-02T14:56:20.269238+00:00 heroku[run.6268]: Awaiting client
2020-06-02T14:56:20.298273+00:00 heroku[run.6268]: Starting process with command `rails c`
2020-06-02T14:56:30.227209+00:00 heroku[run.6268]: Process exited with status 1
2020-06-02T14:56:30.288477+00:00 heroku[run.6268]: State changed from up to complete

这是控制台的输出:

1: from /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:17:in `block in require'
/app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader/callbacks.rb:17:in `on_file_autoloaded': expected file /app/app/models/mailers/application_mailer.rb to define constant Mailers::ApplicationMailer, but didn't (Zeitwerk::NameError)

所以我的想法是应用程序邮件程序没有正确生成,所以我重新生成了它。它仍然没有用。我正在考虑完全删除邮件程序,因为我目前并没有真正使用它。但是,我想知道错误是否会在另一个项目中重复出现。

这是我的申请邮件:

class ApplicationMailer < ActionMailer::Base
  default from: 'from@example.com'
  layout 'mailer'
end

在这一点上,我相信有一些我不明白的地方。除了 application_mailer.rb?

之外还有什么可能导致此错误

我已经尝试重新启动 Heroku 应用程序并迁移数据库……仍然没有。

您需要将 ApplicationMailer 包装在 Mailers 命名空间 - 模块中。

module Mailers
  class ApplicationMailer < ActionMailer::Base
    default from: 'from@example.com'
    layout 'mailer'
  end
end

这至少基本上就是错误消息“/mailers/application_mailer.rb to define constant Mailers::ApplicationMailer”试图告诉您的内容。

但是,我有点困惑您的 mailers 目录嵌套在 app/models 中 - 我希望它在 app/mailers

所以也许最好尝试将 mailers 目录移出 models 并尝试不将其包装在模块中。