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 installbundle 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”

OpenSuse - 无法安装 Rails:在介质上找不到文件

里正数据库引擎找不到

手动安装“papertrail/remote_syslog2”,找不到可执行文件