ruby 生产环境中器械邮件程序的Zeitwerk错误

tktrz96b  于 2022-12-29  发布在  Ruby
关注(0)|答案(2)|浏览(164)

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

邮件程序/预览/设计邮件程序预览.rb

class DeviseMailerPreview < ActionMailer::Preview
  ...
end

当我在本地运行应用程序时,一切都很顺利,我可以在http://localhost:3000/rails/mailers/devise_mailer/confirmation_instructions地址上看到我的电子邮件预览。但现在我试图在服务器上部署应用程序,发现当我运行bundle exec rails c production时,我得到了错误:
/home/部署/.rbenv/版本/2.6.5/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/加载程序/回调。rb:17:在"自动加载的文件“中:需要文件/home/deploy/project/releases/20200627024908/app/mailer/previews/devise_mailer_preview.rb来定义常量预览::DeviseMailerPreview,但没有这样做(Zeitwerk::名称错误)
之后,我在本地检查了RAILS_ENV=production rails c,得到了相同的结果。
如果我将DeviseMailerPreview类重命名为Previews::DeviseMailerPreview,它将被破坏,我无法看到开发的电子邮件,因为Rails 6与docs一样,期望使用这个名称。
更重要的是,我在this article中发现,zeitwerk可以使用autoload_paths参数来配置,以避免ruby的NameError。我发现我的config/application.rb

config.load_defaults 6.0

无论如何,我尝试在我的config/environments/production.rb文件中添加同一行,但没有帮助。
我做错了什么,我该怎么做?提前感谢!

jslywgbw

jslywgbw1#

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

事实上答案就在文件里。

okxuctiv

okxuctiv2#

preview_path加到autoload_paths上,zeitwerk会期望定义DeviseMailerPreview常量。

# development.rb

config.action_mailer.preview_path = Rails.root.join("app/mailers/previews")
# application.rb

config.autoload_paths << Rails.root.join("app/mailers/previews")

相关问题