如何从rails完全禁用turbo链接

时间:2016-08-11 06:08:54

标签: sprockets ruby-on-rails-5 turbolinks rails-sprockets

我经历了不少帖子和turbolinks文档,我想我还没有完成它。我正试图在rails 5应用程序中完全关闭turbolinks。这是我如何去做的

  1. 已移除gem 'trubolinks'
  2. 从application.js
  3. 中删除了所有出现的//=require turbolinks
  4. data-turbolinks-trackstylesheet_link_tag
  5. 删除了javascript_include_tag

    application.html.erb现在看起来像这样

    <html>
      <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title><%= content_for?(:title) ? yield(:title) : "Website" %></title>
        <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Website" %>">
        <%= stylesheet_link_tag 'application', media: 'all' %>
        <%= stylesheet_link_tag params[:controller]  %>
        <%= javascript_include_tag 'application' %>
        <%= javascript_include_tag :modernizr %>    
        <%= javascript_include_tag params[:controller] %>
        <%= if(params[:action].eql?'contact')
              javascript_include_tag 'https://www.google.com/recaptcha/api.js?onload=vcRecaptchaApiLoaded&render=explicit' , async: 'async',  defer: 'defer' 
            end
        %>  
        <%= csrf_meta_tags %>
      </head>
      <body data-turbolinks='false'>
         ...
      </body>
    </html>
    

    application.js文件:

    //= require jquery
    //= require jquery_ujs
    //= require lodash
    //= require bootstrap-sprockets
    //= require jquery.sticky
    

    和application.css

    @import "bootstrap-sprockets";
    @import "bootstrap"; 
    @import "font-awesome-sprockets";
    @import "font-awesome"; 
    @import "normalize-rails";
    @import "animate";
    .... 
    /* other css stuff */
    

    我想在body标签上使用data-turbolinks=false应该有助于为此布局中的所有页面禁用它。但这没有帮助,页面无法加载错误

    Sprockets::FileNotFound at /
    couldn't find file 'turbolinks' with type 'application/javascript'
    Checked in these paths: 
      /Users/anadi/Code/website/app/assets/config
      /Users/anadi/Code/website/app/assets/fonts
      /Users/anadi/Code/website/app/assets/images
      /Users/anadi/Code/website/app/assets/javascripts
    

    在主页上的这一行

    <%= image_tag("pages/home/xyz_logo.png", class: "img-responsive", alt: "Customer") %>

    如果我查看堆栈跟踪,ActionView总是依赖于turbolinks:

      sprockets (3.7.0) lib/sprockets/directive_processor.rb:182:in `rescue in block in process_directives'
      sprockets (3.7.0) lib/sprockets/directive_processor.rb:179:in `block in process_directives'
      sprockets (3.7.0) lib/sprockets/directive_processor.rb:178:in `process_directives'
      sprockets (3.7.0) lib/sprockets/directive_processor.rb:83:in `_call'
      sprockets (3.7.0) lib/sprockets/directive_processor.rb:68:in `call'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:75:in `call_processor'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:57:in `block in call_processors'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:56:in `call_processors'
      sprockets (3.7.0) lib/sprockets/loader.rb:134:in `load_from_unloaded'
      sprockets (3.7.0) lib/sprockets/loader.rb:60:in `block in load'
      sprockets (3.7.0) lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
      sprockets (3.7.0) lib/sprockets/loader.rb:44:in `load'
      sprockets (3.7.0) lib/sprockets/cached_environment.rb:20:in `block in initialize'
      sprockets (3.7.0) lib/sprockets/cached_environment.rb:47:in `load'
      sprockets (3.7.0) lib/sprockets/bundle.rb:23:in `block in call'
      sprockets (3.7.0) lib/sprockets/utils.rb:196:in `dfs'
      sprockets (3.7.0) lib/sprockets/bundle.rb:24:in `call'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:75:in `call_processor'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:57:in `block in call_processors'
      sprockets (3.7.0) lib/sprockets/processor_utils.rb:56:in `call_processors'
      sprockets (3.7.0) lib/sprockets/loader.rb:134:in `load_from_unloaded'
      sprockets (3.7.0) lib/sprockets/loader.rb:60:in `block in load'
      sprockets (3.7.0) lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
      sprockets (3.7.0) lib/sprockets/loader.rb:44:in `load'
      sprockets (3.7.0) lib/sprockets/cached_environment.rb:20:in `block in initialize'
      sprockets (3.7.0) lib/sprockets/cached_environment.rb:47:in `load'
      sprockets (3.7.0) lib/sprockets/base.rb:66:in `find_asset'
      sprockets (3.7.0) lib/sprockets/base.rb:73:in `find_all_linked_assets'
      sprockets (3.7.0) lib/sprockets/manifest.rb:134:in `block in find'
      sprockets (3.7.0) lib/sprockets/manifest.rb:133:in `find'
      sprockets-rails (3.1.1) lib/sprockets/railtie.rb:50:in `precompiled_assets'
      sprockets-rails (3.1.1) lib/sprockets/railtie.rb:35:in `asset_precompiled?'
      sprockets-rails (3.1.1) lib/sprockets/railtie.rb:250:in `block (3 levels) in <class:Railtie>'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:342:in `precompiled?'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:346:in `raise_unless_precompiled_asset'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:313:in `asset_path'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:85:in `block in resolve_asset_path'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:225:in `block in resolve_asset'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:224:in `resolve_asset'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:84:in `resolve_asset_path'
      sprockets-rails (3.1.1) lib/sprockets/rails/helper.rb:74:in `compute_asset_path'
      actionview (5.0.0) lib/action_view/helpers/asset_url_helper.rb:144:in `asset_path'
      actionview (5.0.0) lib/action_view/helpers/asset_url_helper.rb:311:in `image_path'
      actionview (5.0.0) lib/action_view/helpers/asset_tag_helper.rb:214:in `image_tag'
    

    看起来sprockets仍然期望turbolinks js或image_tag url期望它。我不希望最终在每个链接或图像上添加data: { turbolinks: false }。如何使这个工作?

2 个答案:

答案 0 :(得分:1)

  1. 从Gemfile中删除gem'turbolinks'行。
  2. 从app / assets / javascripts / application.js中删除// = require turbolink。
  3. 删除两个“data-turbolinks-track”=&gt;真正的散列键/值对 来自您的app / views / layouts / application.html.erb。

答案 1 :(得分:1)

我可能做错了,重新启用了所有内容,同时添加了--- apiVersion: v1 kind: Service metadata: name: elasticsearch labels: app: elasticsearch spec: ports: - name: rest port: 9200 - name: native port: 9300 clusterIP: None selector: app: elasticsearch --- apiVersion: apps/v1alpha1 kind: PetSet metadata: name: elasticsearch spec: serviceName: "es" replicas: 2 template: metadata: labels: app: elasticsearch annotations: pod.alpha.kubernetes.io/initialized: "true" spec: terminationGracePeriodSeconds: 0 containers: - name: elasticsearch image: 672129611065.dkr.ecr.us-west-2.amazonaws.com/elasticsearch:v1 ports: - containerPort: 9200 - containerPort: 9300 volumeMounts: - name: es-data mountPath: /usr/share/elasticsearch/data env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: ES_CLUSTER_NAME value: EsEvents volumeClaimTemplates: - metadata: name: es-data annotations: volume.alpha.kubernetes.io/storage-class: anything spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi ,并保留了data-turbolinks-track => true。它现在按预期工作,不会出错。