Rails 6 ActionText 在 Heroku 上不工作(未定义的方法 'rich_text_area_tag')

Rails 6 ActionText isn't working on Heroku (undefined method 'rich_text_area_tag')

我正在使用 ActionText 编辑一个段落,它在本地完美运行,但是当我将它部署到 Heroku 时,该页面具有 rich_text_area 的形式,它抛出一个错误,指出未定义的方法 rich_text_area_tag尽管我遵循了 rails 指南。我以为我需要在生产环境中配置 Active Storage,但事实并非如此。

这是我在 Heroku 的日志中得到的: ActionView::Template::Error (undefined method 'rich_text_area_tag' for #<#<Class> Did you mean? rich_text_area)

<%= f.label :something, class:'label' %>
<%= f.rich_text_area :something %>

我在网上找到这个,对我很有帮助:

https://github.com/JoeWoodward/spree_helper_issue

我不确定这是否是正确的方法,但这是一个临时的解决方法。

解决方案:

application_controller.rb中输入以下内容:

require 'action_text'

class ApplicationController < ActionController::Base
  helper ActionText::Engine.helpers

  ...
end

helper 的文档:https://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper

首先确保你在 config/application.rb:

中有这一行
require 'rails/all'

如果是 rails 6 应用程序 action_text/engine 应该加载。

如果没有,可能是 zeitwerk 没有加载。当您的 rails 5.2 应用已更新至 rails 6.

时,会发生这种情况

在同一文件 (config/application.rb) 中,您必须将 config.load_defaults 更改为 6.0:

config.load_defaults 6.0

如果您想知道后台发生了什么,请查看第 125 行的 this link

为避免 ApplicationController 代码混乱,您可以使用初始值设定项:

即添加一个新文件 config/initializers/action_text.rb:

ActiveSupport.on_load(:action_view) do
  include ActionText::ContentHelper
  include ActionText::TagHelper
end

灵感来自 p8's comment in a closed Rails issue