Search code examples
cssruby-on-railstwitter-bootstrapredmineredmine-plugins

Bootstrap won't work in Redmine plugin


I've spent hours trying to use bootstrap for my rails web app, but it's doing absolutely nothing! I can't call any classes for it!

Here's my 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 %>

Notice the bolded code...the link_to line COMPLETELY IGNORES the bootstrap class, like it doesn't even exist! The button_to line works completely fine...

My Gemfile includes bootstrap (yes, I ran bundle install since updating it):

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"

...

Also, my css file most certainly includes bootstrap:

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

/* mixins, variables, etc. */

/* universal */

body {
  padding-top: 0px;
}

section {
  overflow: auto;
}

...

I also even included in bootstrap in my 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 .

It just won't work! The only thing I can think of is that I am building my rails app as part of a plugin for Redmine, and that's somehow messing everything up...but I don't see how!

UPDATE:

I tried doing this:

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

But I get this cryptic error!

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

I don't understand what that means. Why is it looking for bootstrap file in stylesheets directory?? Google has never heard of this error message!


Solution

  • Sorry to disappoint, but if you're building a Redmine plugin using Bootstrap, you're doing it wrong. A plugin (no matter for which platform) should offer a seamless user experience with regards to the host platform itself. Since Redmine is not using Bootstrap, there's no reason you should use it for your plugin.

    Instead, you should have a look at the app/views directory in Redmine and use the same HTML elements in your plugin. You'll have a more seamless UI and less need for custom CSS... Hope that helps.