Bootstrap 不适用于 Redmine 插件

Bootstrap won't work in Redmine plugin

我花了几个小时尝试将 bootstrap 用于我的 rails 网络应用程序,但它完全没有任何作用!我无法为它调用任何 classes!

这是我的 index.html.erb:

<div class="center">
  <h1>Welcome to the User Database</h1>
</div>

<div class="jumbotron">
  <h2>
  This is the home page for the User Database.
  </h2>

  **<%= link_to "Add new entry", new_user_path, class: "btn btn-primary" %>
  <%= button_to "Search", users_search_path, class: "button", :method => :get %>**
</div>

<!-- User Image -->
<div class="center">
  <%= image_tag('user.jpg', :plugin => 'users') %>
</div>

<!-- Style sheet -->
<% content_for :header_tags do %>
<%= stylesheet_link_tag 'style', :plugin => 'users' %>
<% end %>

注意粗体代码...link_to 行完全忽略了 bootstrap class,就像它根本不存在一样! button_to 行完全正常...

我的 Gemfile 包括 bootstrap(是的,我 运行 更新后安装了 bundle):

source 'https://rubygems.org'

if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.5.0')
  abort "Redmine requires Bundler 1.5.0 or higher (you're using #{Bundler::VERSION}).\nPlease update with 'gem update bundler'."
end

#Trying to get bootstrap...?
gem 'bootstrap-sass', '3.3.6'

gem "rails", "4.2.3"
gem "jquery-rails", "~> 3.1.3"

...

此外,我的 css 文件肯定包括 bootstrap:

@import "bootstrap-sprockets";
@import "bootstrap";

/* mixins, variables, etc. */

/* universal */

body {
  padding-top: 0px;
}

section {
  overflow: auto;
}

...

我什至还把 bootstrap 包括在我的 application.js 中:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .

根本行不通!我唯一能想到的是,我正在构建我的 rails 应用程序作为 Redmine 插件的一部分,这不知何故把一切都搞砸了……但我不知道怎么办!

更新:

我试过这样做:

<% content_for :header_tags do %>
  <%= stylesheet_link_tag 'application', :plugin => 'users' %>
<% end %>

但是我得到了这个神秘的错误!

ActionController::RoutingError (No route matches [GET] "/plugin_assets/users/stylesheets/bootstrap"):

我不明白那是什么意思。为什么它在样式表目录中寻找 bootstrap 文件? Google 从未听说过此错误消息!

抱歉让您失望了,但是如果您使用 Bootstrap 构建 Redmine 插件,那您就错了。插件(无论针对哪个平台)都应该提供与主机平台本身相关的无缝用户体验。由于 Redmine 未使用 Bootstrap,因此您没有理由将其用于您的插件。

相反,您应该查看 Redmine 中的 app/views 目录并在您的插件中使用相同的 HTML 元素。您将拥有更无缝的 UI 和更少的自定义需求 CSS...希望对您有所帮助。

Redmine 不支持资产管道(参见 here,4 年前的对话),这意味着您不能在此处使用 sass/scss 文件。您首先需要获取常规 css / js 文件并在您的视图中手动导入它们。

如果你真的想使用bootstrap,你可以先安装redmine_bootstrap_kit插件,它为你提供了帮助,以便更方便(我不是这个的所有者)。

参考资料:

每次你运行Redmine在public/plugin_assets/your_plugin文件夹中时,插件assets目录会自动复制。

<%= stylesheet_link_tag 'style', :plugin => 'users' %> 将查找位于 public/plugin_assets/users/stylesheets/style.js

style.css 文件

<%= javascript_include_tag 'script', :plugin => 'users' %> 将查找位于 public/plugin_assets/users/javascripts/script.js

script.js 文件

请注意,通常 .js.css 文件包含指向其他资源(图像、字体...)的链接。然后,您还需要在 assets/images / assets/fonts... 中包含这些资源,并确保 .js.css 文件中提到的相对路径仍然有效。