【问题标题】:Zeitwerk error on devise mailer in production environment生产环境中设计邮件程序的 Zeitwerk 错误
【发布时间】:2020-06-27 03:22:31
【问题描述】:

我有 Rails 6,我的预览类位于

ma​​iler/previews/devise_mailer_preview.rb

class DeviseMailerPreview < ActionMailer::Preview
  ...
end

当我在本地运行应用程序时,一切正常,我可以在http://localhost:3000/rails/mailers/devise_mailer/confirmation_instructions 地址上看到我的电子邮件预览。但是现在我试图在服务器上部署应用程序,发现当我运行bundle exec rails c production时,我得到了错误:

/home/deploy/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader/callbacks.rb:17:in `on_file_autoloaded':预期文件 /home/deploy/project/releases/20200627024908/app/mailer/previews/devise_mailer_preview.rb 定义常量 Previews::DeviseMailerPreview,但没有 (Zeitwerk::NameError)

之后,我在本地检查了RAILS_ENV=production rails c,并得到了相同的结果。

如果我将 DeviseMailerPreview 类重命名为 Previews::DeviseMailerPreview,它将被破坏,并且我无法看到有关开发的电子邮件,因为 Rails 6 对应于 docs,期望正是该名称。

更多,我在this article 中发现,可以使用autoload_paths 参数配置 zeitwerk 以避免 ruby​​ 的 NameError。我发现我的 config/application.rb 有它:

config.load_defaults 6.0

无论如何,我尝试在 config/environments/production.rb 文件中添加相同的行,但没有帮助。

我做错了什么,我该如何解决?提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-6 mailer zeitwerk


    【解决方案1】:

    您的 Mailer 预览文件位于 mailer/previews/devise_mailer_preview.rb,所以我假设它的完整路径是 app/mailer/previews/devise_mailer_preview.rb

    文档说

    在上面的例子中,UserMailer 的预览类应该命名为UserMailerPreview 并且位于test/mailers/previews/user_mailer_preview.rb

    所以把你的devise_mailer_preview.rb文件放到test/mailers/previews/devise_mailer_preview.rb

    或在您的config/application.rb 中添加此行并重新启动:

    config.action_mailer.preview_path = "#{Rails.root}/app/mailers/previews"
    

    其实答案就在docs 本身。

    【讨论】:

    • 我试过了,还是不行。如果您查看错误消息,Zeitwerk 希望在 .../app/mailer/previews/devise_mailer_preview.rb 中找到常量 Previews::DeviseMailerPreview,也不是 test 也不是 spec 目录
    • @RuslanValeev 您的devise_mailer_preview.rb 文件的完整路径是什么?即它位于哪里?
    • app/mailer/previews/devise_mailer_preview.rb@cdadityang
    • 您可以尝试从application.rb 中删除config.action_mailer.preview_path,然后将devise_mailer_preview.rb 移动到test/mailers/previews/devise_mailer_preview.rb 或rspec spec/mailers/previews/devise_mailer_preview.rb,然后看看是否可行?
    猜你喜欢
    • 2012-11-23
    • 2012-08-13
    • 1970-01-01
    • 2021-07-04
    • 2018-08-21
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多