我有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 :DeviseMailerPreview,但没有(Zeitwerk::NameError)
在此之后,我检查了本地RAILS_ENV=production rails c,并得到了相同的结果。
如果我将DeviseMailerPreview类重命名为Preview::DeviseMailerPreview,它将被破坏,并且我无法看到开发中的电子邮件,因为Rails 6 (相应地将其命名为文档 )完全期望这个名称。
更多的是,我在这篇文章中发现,为了避免ruby的NameError,zeitwerk可以配置autoload_paths param。我发现我有我的config/application.rb
config.load_defaults 6.0无论如何,我试图在我的config/environments/production.rb文件中添加相同的行,但是没有帮助。
我做错了什么,我该如何解决呢?提前感谢!
发布于 2020-06-27 03:42:53
您的邮件预览文件位于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"事实上,答案是在文档本身。
https://stackoverflow.com/questions/62605494
复制相似问题