我有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文件中添加同一行,但没有帮助。
我做错了什么,我该怎么做?提前感谢!
2条答案
按热度按时间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
中添加以下行并重新启动:事实上答案就在文件里。
okxuctiv2#
把
preview_path
加到autoload_paths
上,zeitwerk会期望定义DeviseMailerPreview
常量。