Rails 4可安装引擎,找不到文件’jquery’
我正在创建一个使用gem“jquery-rails”的rails mountable引擎插件。 我在.gemspec文件中添加了此代码
s.add_dependency "jquery-rails", "~> 3.0.1"
并运行bundle install
, bundle 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
存在于:
- 域名资产目录;
- 所有引擎资产目录(即在任何情况下,您在该引擎中都有多个应用程序 )
- 所有引擎测试虚拟目录(即在任何情况下,您在该引擎中有多个应用程序 )
方案 :
-
从您的目录中查找您的
.gemspec
文件并添加依赖项,例如s.add_dependency "jquery-rails", "~> 3.1.1"
-
进入引擎应用程序的根目录。 例如
cd engines/csv_importer/
注意:
csv_importer
是我的引擎中的应用程序名称。 -
通过运行安装添加的依赖项:
bundle install
-
现在接下来要在
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
-
通过运行启动您的rails应用程序:
rails s
这就是我在rails mountable引擎插件中解决问题所做的工作。 我希望这能帮助新手在2018年5月到来。
谢谢