在Heroku上运行的生产环境Rails应用中使用ckeditor出现问题

18

我在我的 Rails 4 应用程序中使用 ckeditor gem。 本地和暂存的 Heroku 环境都可以正常工作,但是在推向生产环境时出现以下错误:

GET http://myapp.herokuapp.com/assets/ckeditor/contents.css 404 (Not Found)
GET http://myapp.herokuapp.com/assets/ckeditor/skins/moono/icons.png 404 (Not Found)

编辑器正常显示,但所有图标都不见了。

我按照README (https://github.com/galetahub/ckeditor)的说明进行了操作,但可能还有些地方不对。

我的操作步骤如下:

1) 进行 Gem 安装、生成等操作...

2) 在 application.js 中添加 config.autoload_paths += %W(#{config.root}/app/models/ckeditor)

3) 在 routes.rb 中添加 mount Ckeditor::Engine => "/ckeditor" (我不明白为什么需要这一步)

4) 在 application.js 中

//= require ckeditor/override
//= require ckeditor/init

这个代码到底是在做什么,为什么需要覆盖?(这些文件位于哪里,因为它们既不在/app/assets中,也不在/lib/assets中,也不在/vendor/assets中)

Heroku是只读模式的,因此我不能像教程中所述那样运行rake任务。 我认为这就是为什么我在生产模式下遇到错误的原因。

有人面对过同样的问题吗? 我查阅了所有的stackoverflow问题,但迄今没有解决我的问题。

更新:

我发现让它工作的唯一方法是实时编译:config.assets.compile = true 但我宁愿在生产环境中不使用它,而且我不明白为什么它可以工作。


你已经解决了这个问题吗?我也遇到了同样的问题,使用Rails 4 + Ckeditor gem + 从他们网站下载的Ckeditor,我按照教程做了一切,但在开发工具中只得到404(未找到)错误,这是路由的问题吗? - Umren
我还没有时间尝试,这就是为什么我没有接受任何答案。 - Jérôme Boé
1
@Umren解决了你的问题吗?我也遇到了同样的问题。 - mgs
不知道自述文件是否已更新(或您是否解决了问题),但他们添加了一个部分来编写一个rake任务,将ckeditor资产的非摘要版本复制到正确的位置。看一下那个,对我来说它工作正常,即使没有添加路径到预编译中。与@felix Ding建议的链接中提出的相同。 - sissy
我也遇到了这个问题。 - Brian Lau
我有同样的问题。在开发中,ckeditor运行良好,但在生产环境中却不行。我已经尝试了这里和github上建议的所有方法 :-((( - Stef Hej
6个回答

15

目前解决该问题的方法已经更改。

无需包含“ckeditor/override.js”

1.更新您的gem。

bundle update ckeditor

将以下代码添加到config/application.rb文件中:

config.assets.precompile += Ckeditor.assets
config.assets.precompile += %w( ckeditor/* )
config.autoload_paths += %W(#{config.root}/app/models/ckeditor)

对我来说有效,希望你也有效。


它能工作!但我不喜欢必须预编译的想法。 - Fabian Rios
这也是我情况下的解决方案。Rails 5。 - jeffci
尝试了这个方法但不起作用。也尝试了heroku run RAILS_ENV=production rake assets:precompile,但编辑器仍无法加载,没有错误提示。 - Tanay Sharma

5

实际上,ckeditor gem 的 readme 中也有一个相同(有效)的解决方案部分,还可以将 rake 任务集成到 capistrano 中。 - sissy

4
我按照 GitHub 上的说明进行操作。
你需要在文件 config/environments/production.rb 中将以下变量设置为 true: config.assets.compile = true 并添加以下代码:
config.assets.precompile += Ckeditor.assets
config.assets.precompile += %w(ckeditor/* )
config.autoload_paths += %W(#{config.root}/app/models/ckeditor)

我使用的环境如下:

gem 'ckeditor', '~> 4.1'

ruby "2.3.0"

rails 5.0.0.1


3
为什么不建议在生产环境中进行实时编译:详见链接 - Outside_Box

1
在您的application.rb中添加config.assets.precompile += Ckeditor.assets应该能够起作用。

2
即使运行第二个 rake assets:precompile,它也不会改变任何东西。 - Jérôme Boé

0

我曾经遇到过同样的问题,这是我的文件以及我如何解决的:

application.js

//= require ckeditor/override
//= require ckeditor/init

Gemfile

group :production do
  gem 'rails_12factor'
end

然后运行 bundle 生成 Gemfile.lock 并将文件提交到你的仓库。

production.rb

config.serve_static_assets = true
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
config.assets.compile = false # we don't want compilation fallbacks

部署到Heroku并进行验证。

希望这能在某种程度上有所帮助。


0

我一直在开发一个应用程序,在开发环境中运行良好,但是当我将其部署到Heroku时,资产根本无法加载,因此我无法加载TinyMCE或CkEditor js或css。

我找到了一个解决方法,本地编译资产并将其推送到Heroku,然后我获得了CkEditor JS的编译资产URL,并像这样在我的视图中包含它

<script src="/assets/ckeditor/ckeditor.js"></script>

如果你想从云端加载ckeditor资源,可以使用CDN,例如

<script src="https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.6.2/ckeditor.js"</script>

此外,您需要在production.rb文件中更改一些设置。

  config.assets.compile = true
  config.assets.precompile += Ckeditor.assets
  config.assets.precompile += %w(ckeditor/* )
  config.autoload_paths += %W(#{config.root}/app/models/ckeditor)

它也可以在Heroku上开始工作。

如有其他问题,请回复。


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