Rails 4可安装引擎,找不到文件'jquery'
Posted
技术标签:
【中文标题】Rails 4可安装引擎,找不到文件\'jquery\'【英文标题】:Rails 4 Mountable Engine, couldn't find file 'jquery'Rails 4可安装引擎,找不到文件'jquery' 【发布时间】:2013-11-14 01:58:44 【问题描述】:我正在创建一个使用 gem "jquery-rails" 的可挂载引擎插件。我在 .gemspec 文件中添加了这段代码
s.add_dependency "jquery-rails", "~> 3.0.1"
然后运行bundle install
、bundle update
。 (顺便说一句,这有必要添加吗?由于可安装的 rails 引擎已经添加了“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/ 上运行服务器并访问任何使用标签 <%= javascript_include_tag "mountable_engine_name/application" %>
的模板时,它会显示错误 “找不到文件 'jquery'”。
我尝试创建一个全新的可挂载引擎插件,但结果相同。
我是不是做错了什么?
PS。对不起我的英语不好。
更新 实际上,它发生在 app/assets/javascript/ 和 test/dummy/app/assets/javascript/ 中需要 jquery 和 jquery-ujs 的所有清单文件中。
【问题讨论】:
尽量给出绝对路径, 谢谢你的答案,但它不起作用。 【参考方案1】:我知道最初的问题是几个月前提出的,但我遇到了同样的问题 在完成 Rails 引擎教程时出现问题,所以我发布以防万一 这对其他人有帮助...
我发现我需要更新四个文件:
1.) 向您的 .gemspec 文件添加依赖项
#file: <your engine name>.gemspec
s.add_dependency "jquery-rails", "~> 3.1.1"
2.) 更新您的引擎 application.js 文件:
#file: <your engine name>/app/assets/javascripts/blorgh/application.js
...
//= require jquery
//= require jquery_ujs
//= require_tree .
3.) 更新您的父应用 application.js 文件:
#file: <your engine name>/test/dummy/app/assets/javascripts/application.js
...
//= require jquery
//= require jquery_ujs
//= require_tree .
4.) 根据 SO thread,您需要在 engine.rb 文件中添加一个要求:
#file: lib/<your engine name>/engine.rb
module <your engine name>
class Engine < ::Rails::Engine
require 'jquery-rails'
isolate_namespace Blorgh
end
end
和平。
【讨论】:
那么引导生成器呢?引导主题也不起作用。 没关系,最好从其网站***.com/questions/18371318/…安装引导程序 此解决方案也适用于 'jquery-datatables-rails' 很好的建议。谢谢! 第3步其实不需要。【参考方案2】:您应该在 gem 的主文件中要求 jquery-rails。
如果您有一个名为“foo”的 gem,请在它的主文件中这样做:
# lib/foo.rb
require "jquery-rails"
# ...
【讨论】:
【参考方案3】:我发现有必要在引擎的 Gemfile 中包含一个引用:
#Gemfile
gem "jquery-rails"
另外,jquery ujs 的要求是用下划线完成的:
//=require jquery_ujs
祝你好运!
【讨论】:
为我工作。谢谢!【参考方案4】:这是每个刚开始使用 Rails 引擎的新手都会遇到的问题。我知道这是一个可以追溯到今天 4 年的问题,并且它的答案已经标记为正确。在为我的引擎应用程序编写 TestCases 时,我在 Rails 5 中遇到了同样的问题,我注意到我必须将 require jquery
添加到我所有引擎的 application.js
文件中,这违反了 rails DRY 范式。
我觉得标记的答案有点违反 Rails DRY(不要重复自己)范式。
在基于 Rails 引擎的解决方案中,application.js
存在于:
-
域资产目录;
您的所有引擎资产目录(即无论如何您在该引擎中拥有多个应用程序)
您的所有引擎测试虚拟目录(即在任何情况下您在该引擎中都有多个应用程序)
解决方案:
从您的目录中查找您的
.gemspec
文件并添加依赖项,例如
s.add_dependency "jquery-rails", "~> 3.1.1"
cd
进入引擎应用的根目录。例如
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 可安装引擎插件中的问题所做的工作。我希望这对 2018 年 5 月的新手有所帮助。
谢谢
【讨论】:
【参考方案5】:添加运行时和开发依赖:
s.add_runtime_dependency "jquery-rails", "~> 3.0.1"
s.add_development_dependency "jquery-rails", "~> 3.0.1"
这对我有用。
【讨论】:
这不是和s.add_dependency
一样吗?【参考方案6】:
我遇到了同样的问题。
使用引擎时,您有两个 application.js
文件。一个在应用程序中,一个在引擎中。
您似乎试图在父应用程序的名称空间目录中包含 jquery,这实际上不是引擎。
简要背景
引擎可以以不同的方式使用,所以我的方法是在父应用(我称之为apps
)中嵌套引擎,就像这样
PARENT_APP_NAME/apps/ENGINE_NAME/app/assets/javascripts/ENGINE_NAME/application.js
这就是你需要包含的地方
//= require jquery
【讨论】:
以上是关于Rails 4可安装引擎,找不到文件'jquery'的主要内容,如果未能解决你的问题,请参考以下文章
rails active admin 部署:找不到文件'jquery-ui'
Rails 服务器告诉我 --- 找不到类型为 'application/javascript' 的文件 'jquery-ui/datepicker'
[Ruby on Rails] 找不到类型为“application/javascript”的文件“jquery-ui/autocomplete”