Octopressサイト(jekyllに基づく)をローカルネットワークにロードしようとしています。サーバーはありません。共有フォルダーでローカルに利用できるようにしたいだけです。
ローカルフォルダにデプロイするたびに、cssとjsおよび背景画像のリンクが壊れます。
Rsync、github、herokuなどの利用可能なオプションはすべて、sshとパスワードを必要とします。これはここで見つけることができます: http://octopress.org/docs/deploying/
これに役立つレーキオプションはありますか?
キキトさん、ご指導ありがとうございました。
私はそれを実装し、gitリポジトリをフォークしました。ただし、問題が1つあります。私はこの手法を使用して、Dropbox Public、ローカルディレクトリ、およびWebホストで同じサイトをホストしました。 /を追加する必要があり、リンクをクリックするとスラッシュが追加されます。リポジトリとDropboxのリンクは次のとおりです。
https://github.com/originalsurfmex/jekyll-relative-bootstrap
あなたが言うようにすべてが機能しますが、あなたや他の人がレイアウトのパーシャルとリンクを見ると、より良いアイデアが得られると思います。
自動方法:
css/jsファイルの場合:
{% assign lvl = page.url | append:'X' | split:'/' | size %}
{% capture relative %}{% for i in (3..lvl) %}../{% endfor %}{% endcapture %}
<link href="{{ relative }}css/main.css" rel="stylesheet" />
<script src="{{ relative }}scripts/jquery.js"></script>
他のファイルの場合:
_config.ymlセット内
url: http://www.yourdomain.com
正規リンク要素を追加します。
<link rel="canonical" href="{{ site.url }}{{ page.url }}" />
jsファイルの1つに、次を追加します。
var relative = null;
if (location.protocol==='file:') {
relative = Array($('link[rel="canonical"]').attr('href').match(/\//g).length-2).join('../');
if (relative == '') relative = './';
}
function to_relative(link, index) {
if (!relative) return link;
var hash = link ? link.match(/#.*$/) : null;
if (hash) link = link.replace(/#.*$/, '');
return link?(link.replace(/^\//, relative)+(index?(link.substr(-1)=='/'?'index.html':''):'')+(hash?hash[0]:'')):null;
}
$(function(){
if (relative) {
$('a').attr('href', function(a,b){return to_relative(b, true);});
$('img').attr('src', function(a,b){return to_relative(b, false);});
}
});
その他の側面については、jQueryを使用してそれらを操作します。
問題は、リソースの一部に到達するために絶対パスを使用していることです。ネットワークのどこかにサイトを展開したい場合は、それらを相対的なものにする必要があります。
私の場合、それを必要とするページ/投稿にroot
という(オプションの)設定を定義し、プロジェクトの「相対ルート」を指すようにします。たとえば、about/index.html
にあるページでは、「上」のレベルが1つしかないため、ルートは../
になります。
---
title: My Page title
root: "../"
---
ディレクトリ内のさらに離れたページには、さらに多くのドットが必要になります:../../
、../../../
など。ルートフォルダ内のページ(index.htmlなど)にはルートは必要ありません。
次に、その設定を使用してallパスを生成します。
そのページにアクセスしている、または自分自身を投稿していて、ローカル画像または別のページを参照する必要がある場合は、page.root
またはpost.root
を使用します。
<img src="{{ post.root }}images/happy.png" />
<a href="{{ post.root }}2010/01/01/another_post>Relative link to another post</a>
直接参照を作成することは可能ですが(../images/happy.png
)、これはサイトを作成するときにうまく機能し、各ページの明確なパスについてはまだわかりません。
_includes内の1つの部分ファイルにすべてのcssとjsが含まれています。 root
という変数を作成して、ページと投稿の両方で機能することを確認します。
{% capture root %}{% if page.root %}{{ page.root }}{% else %}{{ post.root }}{% endif %}{%endcapture%}
<script type="text/javascript" src="{{ root }}js/jquery-min.js"></script>
<link rel="stylesheet" type="text/css" href="{{ root }}/css/style.css" />
それはほとんどそれです。
特定のフォルダー用にサイトを生成する必要がある場合は、html <base />
タグを使用する方が簡単な場合があります。ルートフォルダを基準にしたすべてのアセットパスを使用して、デフォルトのレイアウトに以下を追加します。
<base href="{{ site.baseurl }}" />
次に、jekyll --base-url <folder> <folder>
を使用して、baseurl
を正しく設定してjekyllサイトを<folder>
にデプロイします。
これは、組み込みのWEBrickサーバーでも変更なしで機能することに注意してください。 jekyll --server
で開始し、カスタム--base-url
を指定しないでください。
更新:gimpfがコメントで指摘しているように、これはアンカーリンクでは期待どおりに機能しません。これらは、現在のページではなくベースURLを指します。 回避策 JavaScriptを使用しています。例: jQueryでアンカーhrefを書き直します。
$().ready(function() {
$("a[href^='\#']").each(function(){
this.href=location.href.split("#")[0]+'#'+this.href.substr(this.href.indexOf('#')+1);
});
});
これを扱う Jekyllのgithubの問題 があります。 _config.yml
を置く:
url: "<your domain>"
次に、{{ site.url }}
を使用するとURLが返されます。したがって、たとえば、ページのヘッダーから/css/styles.css
ファイルを参照するには次のようにします。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<...>
<link rel="stylesheet" href="{{ site.url }}/css/style.css" type="text/css" />
<...>
</head>
<body>
...
</body>
</html>
代替回答-
ローカルでホストされている静的htmlについても同様の要件があり、Webサーバーなしで他のコンピューターに配布して、通常のブラウザーでファイルシステムから読み取ることができました。
さまざまな場所で難解なパス構文をいじるのではなく(このスレッドの他の回答で証明できますが)、代わりに、通常どおりJekyllが提供するlocalhost:4000にサイトを公開することで、回避策を選択しました。 wget
ユーティリティを使用して静的Webサイトの静的コピーをダウンロードし、標準のWebブラウザを使用してファイルシステムから開いてナビゲートすることができました。 wget
は、パスを相対的なものにするという大変な作業を行います。
これは私が使用するwget
コマンドです-
wget \
--recursive \
--no-clobber \
--page-requisites \
--html-extension \
--convert-links \
--restrict-file-names=windows \
--domains localhost http://localhost:4000