Rails 4可安装引擎,找不到文件’jquery’

我正在创建一个使用gem“jquery-rails”的rails mountable引擎插件。 我在.gemspec文件中添加了此代码

s.add_dependency "jquery-rails", "~> 3.0.1" 

并运行bundle installbundle update 。 (BTW是否需要添加?因为rails mountable引擎已经添加了“rails 4.0.1”,这反过来又要求“jquery-rails 3.0.4”作为它的依赖从一开始?)。

在app / assets / javascript / mountable_engine_name / application.js中

 //= require jquery //= require jquery-ujs //= require_tree . 

但是当我在test / dummy /上运行服务器并访问使用标签的任何模板时,它显示错误“无法找到文件’jquery’”

我尝试创建一个全新的可安装引擎插件,但它发生的情况相同。

我做错什么了吗?

PS。 对不起我的英语不好。

UPDATE
实际上它发生在app / assets / javascript /和test / dummy / app / assets / javascript /中需要jquery和jquery-ujs的所有清单文件中。

我知道原来的问题是在几个月前被问到的,但我在使用Rails引擎教程时遇到了同样的问题,所以我发帖以防万一这有助于其他人……

我发现我需要更新四个文件:

1.)为.gemspec文件添加依赖项

  #file: .gemspec s.add_dependency "jquery-rails", "~> 3.1.1" 

2.)更新您的引擎application.js文件:

  #file: /app/assets/javascripts/blorgh/application.js ... //= require jquery //= require jquery_ujs //= require_tree . 

3.)更新您的父app app.js文件:

  #file: /test/dummy/app/assets/javascripts/application.js ... //= require jquery //= require jquery_ujs //= require_tree . 

4.)根据此SO线程 ,您需要向engine.rb文件添加一个require:

  #file: lib//engine.rb module  class Engine < ::Rails::Engine require 'jquery-rails' isolate_namespace Blorgh end end 

和平。

您应该在gem的主文件中需要jquery-rails。

如果你有一个名为“foo”的gem,请在它的主文件中这样做:

 # lib/foo.rb require "jquery-rails" # ... 

我发现有必要在引擎的Gemfile中包含一个引用:

 #Gemfile gem "jquery-rails" 

另外,jquery ujs的要求是用下划线完成的:

 //=require jquery_ujs 

祝你好运!

添加运行时和开发依赖项:

 s.add_runtime_dependency "jquery-rails", "~> 3.0.1" s.add_development_dependency "jquery-rails", "~> 3.0.1" 

这对我有用。

我有同样的问题。

使用引擎时,您有两个application.js文件。 应用程序中的一个和引擎中的一个。

看起来你试图将jquery包含在父目录中的名称间隔目录中,这实际上并不是引擎。

简要背景

引擎可以以不同的方式使用,所以我的方法是在父应用程序(我称之为apps )中嵌套引擎,就像这样

 PARENT_APP_NAME/apps/ENGINE_NAME/app/assets/javascripts/ENGINE_NAME/application.js 

这是你需要包含的地方

 //= require jquery 

这是一个问题,每个新手从Rails Engine面孔开始。 我知道它的问题可以追溯到今天的4年,它的答案已经标明正确了。 在为我的引擎应用程序编写TestCases时,我在Rails 5中遇到了同样的问题,我注意到我必须在我的所有引擎的application.js文件中添加require jquery ,这违反了rails DRY范例。

我觉得明显的答案有点违反了Rails DRY(不要重复自己)的范例。

在基于Rails引擎的解决方案中, application.js存在于:

  1. 域名资产目录;
  2. 所有引擎资产目录(即在任何情况下,您在该引擎中都有多个应用程序
  3. 所有引擎测试虚拟目录(即在任何情况下,您在该引擎中有多个应用程序

方案

  1. 从您的目录中查找您的.gemspec文件并添加依赖项,例如

     s.add_dependency "jquery-rails", "~> 3.1.1" 
  2. 进入引擎应用程序的根目录。 例如

     cd engines/csv_importer/ 

    注意: csv_importer是我的引擎中的应用程序名称。

  3. 通过运行安装添加的依赖项:

     bundle install 
  4. 现在接下来要在lib/engine.rb require query-rails

     require 'jquery-rails' 

    ..在我自己的情况下,我为engine.rb添加了一个简单的初始化程序,并在那里也需要'jquery-rails' 。 这使我能够从域/父应用程序运行其他任务,例如将引擎应用程序本身作为gem捆绑到父应用程序中。 在那里需要jquery-rails也使’jquery-rails’在我的特定引擎应用程序中全局可用。 例如,我有:

     require 'jquery-rails' module CsvImporter #Note CsvImporter is the engine name/app in my own case class Engine < ::Rails::Engine isolate_namespace CsvImporter #Note CsvImporter is the engine name/app in my own case # This enables me to be able to correctly migrate the database from the parent application. initializer :append_migrations do |app| unless app.root.to_s.match(root.to_s) config.paths['db/migrate'].expanded.each do |p| app.config.paths['db/migrate'] << p end end end end end 
  5. 通过运行启动您的rails应用程序:

     rails s 

这就是我在rails mountable引擎插件中解决问题所做的工作。 我希望这能帮助新手在2018年5月到来。

谢谢