【发布时间】:2020-06-27 03:22:31
【问题描述】:
我有 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,期望正是该名称。
更多,我在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