Rails 6 ActionText 在 Heroku 上无法工作(undefined method 'rich_text_area_tag')

12

我使用ActionText编辑段落,在本地工作正常,但是当我将其部署到Heroku时,包含rich_text_area表单的页面会抛出一个错误,说undefined method 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 %>

你的错误提示是 undefined method 'rich_text_area_tag',但是你的代码中只有 rich_text_area。你是否只更新了 f.rich_text_area - user11831257
你尝试过在部署后运行像 heroku run bundle exec rake db:migrateheroku run bundle exec rake assets:precompile 这样的命令吗? - user11831257
@allenbrkn 我尝试了两种方法,但仍然出现相同的错误。 - Grofen
你能否运行 heroku run rails -vheroku run ruby -v 命令,查看 Heroku 是否使用了你所偏好的 Rails/Ruby 版本。大多数情况下它会正确使用,但为了保险起见,请确认一下。另外,请更新你的完整 form 代码。 - user11831257
不知道是什么导致了错误。但你能否尝试将 scope: chapter 改为 scope: :chapter - user11831257
显示剩余2条评论
3个回答

16

感谢@Violeta,我在app/controllers/application_controller.rb中添加了require 'action_text'helpers ActionText::Engine.helpers,因为它是链接中的内容。 - Grofen
很高兴能够帮助! - Violeta
3
小改动使其运作顺畅:helper ActionText::Engine.helpers(没有 "s")。我认为这是一个笔误 :) - rtrojanowski

3

首先确保在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行上的此链接

1
感谢您抽出时间查看,我检查了 config/application.rb 文件,发现有这两行代码 require 'rails/all'config.load_defaults 6.0。唯一有效的解决方案是添加 require 'action_text',但最终我还需要手动添加 trix-editor 标签。@TopperH - Grofen
你是否因某些原因未使用Zeitwerk? - TopperH
我在 config/application.rb 中设置了 config.autoloader = :zeitwerk。@TopperH - Grofen

1
为了避免混乱代码,您可以使用初始化程序:
例如,添加一个新文件config/initializers/action_text.rb:
ActiveSupport.on_load(:action_view) do
  include ActionText::ContentHelper
  include ActionText::TagHelper
end

受到p8在关闭的Rails 问题中的评论的启发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接