Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Middleman paths not working on subdirectory

So, this is my first middleman project and I'm struggling with how middleman manages links.

As it is, I've set it up on a github page. All my assets are working, so I got that right, but the paths leading to each pages fail on account of the website being on a subdirectory.

Basically root/directoryname/index.html works but every link goes back one directory, so where I should have root/directoryname/page.html I get root/page.html.

Here, have a link to see it live

Here's what my config.rb looks like :

# Reload the browser automatically whenever files change
configure :development do
activate :livereload
end

# Methods defined in the helpers block are available in templates
# helpers do
#   def some_helper
#     "Helping"
#   end
# end

set :css_dir, 'css'

set :js_dir, 'js'

set :images_dir, 'img'

# Build-specific configuration
configure :build do
  # For example, change the Compass output style for deployment
  activate :minify_css

  # Minify Javascript on build
  activate :minify_javascript

  # Enable cache buster
  activate :asset_hash

  # Use relative URLs
  activate :relative_assets

  activate :directory_indexes

  # Or use a different image path
  # set :http_prefix, "/Content/images/"
end

activate :deploy do |deploy|
  deploy.method = :git
  # Optional Settings
  # deploy.remote   = "custom-remote" # remote name or git url, default: origin
  # deploy.branch   = "custom-branch" # default: gh-pages
  # deploy.strategy = :submodule      # commit strategy: can be :force_push or :submodule, default: :force_push
end

data.works.each do |item|
  proxy "/references/#{item.clean}.html", "/work.html", :locals => { :code => item }, :ignore => true
end

helpers do
    # Sets the html class to 'active' when the link url is equal to the current page being viewed.
    # Use just like the link_to helper.
    # <%= magic_link_to 'Home', '/index.html' %>
    def magic_link_to(link, url, opts={})
        current_url = current_resource.url
        if current_url == url_for(url) || current_url == url_for(url) + "/"
            opts[:class] = "active"
        end
        link_to(link, url, opts)
    end
end

And here's what my main menu looks like:

<nav id="mainNav">
    <ul>
        <li id="logo"><% link_to '/index.html' do %><span>ben</span> rajalu<% end %></li>
        <li id="homeLink"><%= magic_link_to 'home', '/index.html' %></li>
        <li class="divider"></li>
        <li><%= magic_link_to 'services', '/services.html' %></li>
        <li class="divider"></li>
        <li><%= magic_link_to 'références', '/references.html' %></li>
        <li class="divider"></li>
        <li><%= magic_link_to 'a propos', '/a-propos.html' %></li>
        <li class="divider"></li>
        <li id="contact"><a href="#" class="offTrigger" data-target="#contactBar">contact</a></li>
    </ul>
</nav>

What do you guys think ? What have I missed ?

like image 947
benBecker Avatar asked May 02 '14 18:05

benBecker


1 Answers

That's a basic issue with deploying Middleman projects to Github Pages.

The problem is that Github Pages deploy websites to subfolders, so when you have an absolute link, e. g. <a href="/services.html">, it will always point to a wrong location.

You need to switch Middleman to a relative links mode. Add this to your config.rb:

set :relative_links, true
like image 154
Andrey Mikhaylov - lolmaus Avatar answered Oct 14 '22 01:10

Andrey Mikhaylov - lolmaus