0

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

mailer/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相对应,期望正是该名称。

更重要的是,我在这篇文章中发现,可以使用参数配置 zeitwerkautoload_paths以避免 ruby​​ 的 NameError。我发现我有我的config/application.rb

config.load_defaults 6.0

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

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

4

1 回答 1

0

您的 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"

实际上答案就在文档本身中。

于 2020-06-27T03:42:53.323 回答