首页 文章

Rails 4可安装引擎,无法't find file ' jquery'

提问于
浏览
8

我正在创建一个使用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 /上运行服务器并访问使用标签 <%= javascript_include_tag "mountable_engine_name/application" %> 的任何模板时,它显示错误 "couldn't find file 'jquery'" .

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

我做错什么了吗?

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

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

6 回答

  • 17

    我知道原来的问题是在几个月前被问到的,但我在使用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.)更新您的父app app.js文件:

    #file: <your engine name>/test/dummy/app/assets/javascripts/application.js
    
        ...
        //= require jquery                                                                                                                         
        //= require jquery_ujs                                                                                                                     
        //= require_tree .
    

    4.)根据SO thread,您需要在engine.rb文件中添加一个require:

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

    和平 .

  • 5

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

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

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

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

    #Gemfile
    gem "jquery-rails"
    

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

    //=require jquery_ujs
    

    祝你好运!

  • 0

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

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

    这对我有用 .

  • 2

    我有同样的问题 .

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

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

    Brief Context

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

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

    这是你需要包含的地方

    //= require jquery
    
  • 0

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

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

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

    • 域名资产目录;

    • 所有引擎资产目录(即在任何情况下,您在该引擎中都有多个应用程序)

    • 所有引擎测试虚拟目录(即在任何情况下,您在该引擎中都有多个应用程序)

    Solution

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

    s.add_dependency "jquery-rails", "~> 3.1.1"
    
    • cd进入引擎应用的根目录 . 例如

    cd engines/csv_importer/
    

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

    • 运行以下命令安装添加的依赖项:

    bundle install
    
    • 现在接下来要在lib / engine.rb中要求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月到来 .

    谢谢

相关问题