部署Rails应用程序。JQuery-UI错误。

5

我刚刚将我的应用程序部署到了云服务器上,但是遇到了一个错误:

ActionView::Template::Error (couldn't find file 'jquery-ui'
  (in /home/me/.rvm/gems/ruby-1.9.3-p429/gems/activeadmin-0.6.0/app/assets/javascripts/active_admin/base.js:2)):

我之前在共享主机上部署了同样的应用程序,但之前没有出现这个错误。所以我猜在我的部署中漏掉了一些东西。 顺便说一句,在base.js文件中:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require active_admin/application

在我的app/assets/javascripts/application.js.erb文件中:

//= require Player/soundmanager2-nodebug-jsmin.js
//= require jquery
//= require jquery.ui.all
//= require jquery_ujs
//= require best_in_place
//= require best_in_place.purr
//= require jquery-fileupload
//= require contextMenu/jquery.contextMenu.js
//= require contextMenu/jquery.ui.position.js
//= require_tree .
//= require_tree ./Player

编辑:在我的Gemfile文件中:

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'jquery-fileupload-rails'
gem 'jquery-ui-rails'
2个回答

6

我一直在为这个问题苦恼......

我相信你遇到了ActiveAdmin和jquery-rails gem之间最近创建的矛盾; 从根本上讲,你的配置没有问题。

jquery-rails曾经包含JQuery UI的JavaScript副本(但不包括CSS;不确定原因)。这就是被引入到下面这行代码中的内容:

//= require jquery-ui

在ActiveAdmin的base.js文件中。最近,jquery-rails删除了其包含JQuery UI JavaScript的部分,因此上面的那行现在指向空,并导致资产构建错误。安装jquery-ui-rails没有帮助,因为该宝石重命名文件,以便正确的require行是
//= require jquery.ui.all

可能是为了避免与之前版本的jquery-rails冲突。

不幸的是,根据this issue report,ActiveAdmin不能简单地将自己重置为jquery-ui-rails而不是jquery-rails,并保持与Rails 3.0的向后兼容性。因此,解决方案可能需要几天时间。

同时,在Gemfile中请求一个仍包含JQuery UI JavaScript的旧版本jquery-rails即可。

gem 'jquery-rails', '<3.0.0'

我尝试了各种方法,最终 '<3.0.0' 生效了。谢谢! - Lavixu
文件被重命名是我的问题。谢谢 :) - McCee

2
遇到类似的问题,我发现将gem jquery-ui移出group :assets块对我有帮助。此外,您会注意到在gemfile中有以下内容:
# Gems used only for assets and not required
# in production environments by default.

请确保此部分不属于:assets组。

更新

我认为您的application.js文件的排序应该如下:

//= require jquery
//= require jquery_ujs
//= require_tree .
//
//= require jquery-ui
//= require jquery.ui.all
//= require active_admin/application
//= require Player/soundmanager2-nodebug-jsmin.js
//= require best_in_place
//= require best_in_place.purr
//= require jquery-fileupload
//= require contextMenu/jquery.contextMenu.js
//= require contextMenu/jquery.ui.position.js

此外,为确保您的设置在application.rb中正确,请添加以下内容:

Application.rb

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

production.rb

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = false

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = true

当您想运行以下命令时:bundle exec rake assets:precompile:all RAILS_ENV=production


@GeorgesLeYeti 如果你看一下错误信息,它说(couldn't find file 'jquery-ui' 它正在寻找 jquery-ui。从你之前的评论中,你只提到了 gem 'jquery-ui-rails' - Deej
@GeorgesLeYeti,此外,基础设施jquery文件应该首先被调用。所需文件的顺序很重要。此外,我不明白为什么你有app/assets/javascripts/application.js.erb,这对我来说毫无意义,你为什么要这样做? - Deej
@GeorgesLeYeti 对我的回答进行了进一步补充。 - Deej
非常感谢。 我删除了base.js文件的内容,它可以工作,但我不喜欢这个想法。我会撤销我的更改并测试您的解决方案。 - GeorgesLeYeti
@GeorgesLeYeti 不用担心,我不会建议删除 base.js 文件的内容。按照资产管道的最佳实践,将您的 JS 要求在您的应用程序.js 中是很好的做法,我已经为您设置好了。 - Deej

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