<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>博客 on 冯威的博客</title><link>https://fwhyy.com/tags/%E5%8D%9A%E5%AE%A2/</link><description>Recent content in 博客 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 06 Feb 2023 09:43:24 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E5%8D%9A%E5%AE%A2/atom.xml" rel="self" type="application/rss+xml"/><item><title>我的博客换成了 NotionNext</title><link>https://fwhyy.com/2023/02/my-blog-use-notion-next/</link><pubDate>Mon, 06 Feb 2023 09:43:24 +0800</pubDate><guid>https://fwhyy.com/2023/02/my-blog-use-notion-next/</guid><description>&lt;p&gt;在《程序员不可错过的一款Hexo博客主题》中介绍了我博客的主题 stellar ，还介绍了部署方式的调整：&lt;/p&gt;</description></item><item><title>我将图床换到了阿里云 OSS</title><link>https://fwhyy.com/2023/01/i-switched-the-graph-bed-to-alibaba-cloud-oss/</link><pubDate>Sat, 14 Jan 2023 09:36:56 +0800</pubDate><guid>https://fwhyy.com/2023/01/i-switched-the-graph-bed-to-alibaba-cloud-oss/</guid><description>&lt;p&gt;关于博客的图床，一直都是白嫖，最早放过七牛云，然后经历过一次惨痛的迁移，才知道便宜的东西才是最贵的，后来存放到 Github 中，然后使用 jsdelivr 的 CDN 加速，最近发现 jsdelivr 的 CDN 也需要科学才能访问了。&lt;/p&gt;</description></item><item><title>程序员不可错过的一款Hexo博客主题</title><link>https://fwhyy.com/2022/02/hexo-stellar/</link><pubDate>Thu, 10 Feb 2022 08:42:53 +0800</pubDate><guid>https://fwhyy.com/2022/02/hexo-stellar/</guid><description>&lt;p&gt;自从 2018 年开始写公众号之后，我的个人站点（fwhyy.com）就停止更新了，直到最近查资料发现了hexo 博客的 stellar 主题，春节期间将博客重新维护起来，主要原因是因为该主题支持专栏的功能。&lt;/p&gt;</description></item><item><title>Hexo 的 Stellar 主题问题</title><link>https://fwhyy.com/2022/01/hexo-stellar-theme-problems/</link><pubDate>Thu, 27 Jan 2022 14:45:54 +0800</pubDate><guid>https://fwhyy.com/2022/01/hexo-stellar-theme-problems/</guid><description>&lt;h2 id="软件版本"&gt;软件版本&lt;/h2&gt;
&lt;p&gt;相关的版本如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;macOS: 10.15.7
Hexo: 5.4.0
hexo-cli: 4.3.0
node.js: 14.17.3 
npm: 6.14.13
stellar: 1.6.1
&lt;/code&gt;&lt;/pre&gt;&lt;!-- more --&gt;
&lt;h2 id="问题1-hexo-g-生成问题"&gt;问题1： hexo g 生成问题&lt;/h2&gt;
&lt;p&gt;当我的post数量超过 6 时，使用hexo g 进行生成就会报下图中的错误，删掉一篇就能生成成功，尝试过换不同的post文章，基本能排除是某一个文章特殊内容的问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原文中的错误截图文件已经缺失，这里保留文字说明。
尝试过将 stellar 降级到 1.6.0 和 1.5.2 都出现相同错误。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;后来尝试将_config.xml 中的主题切换成默认主题 languages ，执行 hexo g ，可以正常生成，然后又切回 stellar 主题，hexo g 正常了。后面间歇性的发生上图错误，来回切换下就正常了，很是奇怪。&lt;/p&gt;
&lt;h2 id="问题2运行时问题"&gt;问题2：运行时问题&lt;/h2&gt;
&lt;p&gt;post 文章加到了将近 20 篇时，hexo g 生成没有问题，hexo s 运行后，访问网页，不能正常显示，控制台出现如下错误：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

&amp;lt;--- Last few GCs ---&amp;gt;

[12722:0x110008000] 35949 ms: Scavenge 3974.7 (4103.6) -&amp;gt; 3974.6 (4104.6) MB, 7.9 / 0.0 ms (average mu = 0.813, current mu = 0.672) allocation failure 
[12722:0x110008000] 35974 ms: Scavenge 3975.6 (4104.6) -&amp;gt; 3973.8 (4119.6) MB, 22.8 / 0.0 ms (average mu = 0.813, current mu = 0.672) allocation failure 
[12722:0x110008000] 37751 ms: Mark-sweep 3988.7 (4119.6) -&amp;gt; 3986.5 (4135.6) MB, 1742.6 / 0.0 ms (average mu = 0.656, current mu = 0.133) allocation failure scavenge might not succeed


&amp;lt;--- JS stacktrace ---&amp;gt;

FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
 1: 0x10130c5e5 node::Abort() (.cold.1) [/usr/local/bin/node]
 2: 0x1000b2289 node::Abort() [/usr/local/bin/node]
 3: 0x1000b23ef node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
 4: 0x1001f68c7 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 5: 0x1001f6863 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
 6: 0x1003a47e5 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
 7: 0x100400823 v8::internal::EvacuateNewSpaceVisitor::Visit(v8::internal::HeapObject, int) [/usr/local/bin/node]
 8: 0x1003e808b void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail&amp;lt;v8::internal::EvacuateNewSpaceVisitor, v8::internal::MajorNonAtomicMarkingState&amp;gt;(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode) [/usr/local/bin/node]
 9: 0x1003e7bd5 v8::internal::FullEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*) [/usr/local/bin/node]
10: 0x1003e7916 v8::internal::Evacuator::EvacuatePage(v8::internal::MemoryChunk*) [/usr/local/bin/node]
11: 0x10040524e v8::internal::PageEvacuationTask::RunInParallel(v8::internal::ItemParallelJob::Task::Runner) [/usr/local/bin/node]
12: 0x1003bf202 v8::internal::ItemParallelJob::Task::RunInternal() [/usr/local/bin/node]
13: 0x1003bf688 v8::internal::ItemParallelJob::Run() [/usr/local/bin/node]
14: 0x1003e9985 void v8::internal::MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks&amp;lt;v8::internal::FullEvacuator, v8::internal::MarkCompactCollector&amp;gt;(v8::internal::MarkCompactCollector*, v8::internal::ItemParallelJob*, v8::internal::MigrationObserver*, long) [/usr/local/bin/node]
15: 0x1003e9586 v8::internal::MarkCompactCollector::EvacuatePagesInParallel() [/usr/local/bin/node]
16: 0x1003d4cf7 v8::internal::MarkCompactCollector::Evacuate() [/usr/local/bin/node]
17: 0x1003d258b v8::internal::MarkCompactCollector::CollectGarbage() [/usr/local/bin/node]
18: 0x1003a4eab v8::internal::Heap::MarkCompact() [/usr/local/bin/node]
19: 0x1003a1499 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
20: 0x10039f2e0 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
21: 0x1003ad9ea v8::internal::Heap::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
22: 0x1003ada71 v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
23: 0x100376cce v8::internal::FactoryBase&amp;lt;v8::internal::Factory&amp;gt;::NewRawTwoByteString(int, v8::internal::AllocationType) [/usr/local/bin/node]
24: 0x10078f54d v8::internal::IncrementalStringBuilder::Extend() [/usr/local/bin/node]
25: 0x1004bd9ad v8::internal::JsonStringifier::SerializeString(v8::internal::Handle&amp;lt;v8::internal::String&amp;gt;) [/usr/local/bin/node]
26: 0x1004c2458 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
27: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
28: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
29: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
30: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
31: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
32: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
33: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
34: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
35: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
36: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
37: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
38: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
39: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
40: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
41: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
42: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
43: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
44: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
45: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
46: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
47: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
48: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
49: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
50: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
51: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
52: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
53: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
54: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
55: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
56: 0x1004c2805 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
57: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
58: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
59: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
60: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
61: 0x1004c4008 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;true&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
62: 0x1004c07ee v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
63: 0x1004be856 v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle&amp;lt;v8::internal::JSReceiver&amp;gt;, unsigned int, unsigned int) [/usr/local/bin/node]
64: 0x1004bf687 v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_&amp;lt;false&amp;gt;(v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, bool, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
65: 0x1004ba503 v8::internal::JsonStringify(v8::internal::Isolate*, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;, v8::internal::Handle&amp;lt;v8::internal::Object&amp;gt;) [/usr/local/bin/node]
66: 0x1002a0253 v8::internal::Builtin_JsonStringify(int, unsigned long*, v8::internal::Isolate*) [/usr/local/bin/node]
67: 0x100a81b59 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/usr/local/bin/node]
68: 0x100a14839 Builtins_ArgumentsAdaptorTrampoline [/usr/local/bin/node]
69: 0x100a1a902 Builtins_InterpreterEntryTrampoline [/usr/local/bin/node]
zsh: abort hexo s
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>MySQL服务不能启动，原因竟然是...</title><link>https://fwhyy.com/2018/01/the-mysql-service-cant-start-the-reason-is-that/</link><pubDate>Wed, 31 Jan 2018 23:13:02 +0800</pubDate><guid>https://fwhyy.com/2018/01/the-mysql-service-cant-start-the-reason-is-that/</guid><description>&lt;p&gt;老婆最近使用MWeb往部署在Linode中的Wordpress博客中更新女儿的博客，发现图片不能正常上传，出现各种状况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MWeb闪退&lt;/li&gt;
&lt;li&gt;提示图片张数超过限制&lt;/li&gt;
&lt;li&gt;一直Loading&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有重度拖延症的我今天在老婆的“强迫”下决定解决此问题。&lt;/p&gt;</description></item><item><title>Hexo的一些坑</title><link>https://fwhyy.com/2017/09/some-of-the-pits-in-hexo/</link><pubDate>Fri, 01 Sep 2017 08:36:34 +0800</pubDate><guid>https://fwhyy.com/2017/09/some-of-the-pits-in-hexo/</guid><description>&lt;p&gt;最近在研究&lt;code&gt;Angular4&lt;/code&gt;，将&lt;code&gt;Mac&lt;/code&gt;上的&lt;code&gt;node&lt;/code&gt;和&lt;code&gt;npm&lt;/code&gt;都升级为了最新版本，当使用&lt;code&gt;hexo&lt;/code&gt;的时候发现报错，当即决定将&lt;code&gt;hexo&lt;/code&gt;也升级最新版本。&lt;/p&gt;
&lt;p&gt;升级完&lt;code&gt;hexo&lt;/code&gt;，将所有的博客迁移过来，执行&lt;code&gt;hexo g&lt;/code&gt;，&lt;code&gt;hexo s&lt;/code&gt;，很顺利，没有任何问题，马上执行&lt;code&gt;hexo d&lt;/code&gt;发布到服务器，发现页面显示如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301949948.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;查看本地环境的&lt;code&gt;public&lt;/code&gt;目录，发现生成的&lt;code&gt;html&lt;/code&gt;页面的代码就如上图，但本地运行又是正常的。一个直接的反应就是，上面的代码是在运行时依赖&lt;code&gt;node&lt;/code&gt;解析成&lt;code&gt;html&lt;/code&gt;页面的。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt;到&lt;code&gt;vps&lt;/code&gt;上查看&lt;code&gt;node&lt;/code&gt;版本，发现很低，一通折腾升级&lt;code&gt;node&lt;/code&gt;版本，最终将&lt;code&gt;vps&lt;/code&gt;上&lt;code&gt;node&lt;/code&gt;和&lt;code&gt;npm&lt;/code&gt;版本升级到和本地环境一致，发现网站依然不能正常运行。&lt;/p&gt;
&lt;p&gt;尝试将本地&lt;code&gt;public&lt;/code&gt;目录中的文件删掉，发现本地环境依然正常运行，这时才恍然大悟，本地执行&lt;code&gt;hexo s&lt;/code&gt;，并不是执行的&lt;code&gt;public&lt;/code&gt;目录中的内容，而是动态编译运行的。&lt;/p&gt;
&lt;p&gt;重新&lt;code&gt;hexo init hblog&lt;/code&gt;，安装步骤重新来了一个，执行&lt;code&gt;hexo g&lt;/code&gt; 发现&lt;code&gt;public&lt;/code&gt;目录中生成的&lt;code&gt;html&lt;/code&gt;已经正常，&lt;code&gt;hexo d&lt;/code&gt;发布到服务器，一切OK。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对执行原理的不了解，导致走了很多弯路，瞎折腾了翻&lt;/li&gt;
&lt;li&gt;hexo本地运行并不是运行的public中的内容&lt;/li&gt;
&lt;li&gt;服务器端无需安装node，也可以运行hexo&lt;/li&gt;
&lt;li&gt;至今还不知道开始生成的html不正确是什么原因导致&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>在Linode上的Ubuntu12.04中搭建Hexo</title><link>https://fwhyy.com/2016/09/build-ubuntu12-04-in-linode-on-hexo/</link><pubDate>Fri, 02 Sep 2016 06:42:53 +0800</pubDate><guid>https://fwhyy.com/2016/09/build-ubuntu12-04-in-linode-on-hexo/</guid><description>&lt;p&gt;自从接触了Markdown后就喜欢上了，写博客自然也就想使用Markdown，但Wordpress中的Markdown插件都不怎么好用。找了很久终于找了一个在当时感觉还不错的方法，使用马克飞象写然后导出成Html在Wordpress的后台进行发布，具体参见《&lt;a href="http://fwhyy.com/2015/06/use-markdown-in-wordpress/"&gt;WordPress使用Markdown&lt;/a&gt;》。虽然效果还不错但操作起来比较繁琐，所以经过一番折腾，使用Hexo代替了Wordpress，本文主要讲下怎样在Linode中搭建Hexo。&lt;/p&gt;
&lt;p&gt;如果您还不知道Linode和Hexo是什么，自行Google之，本文不做介绍。&lt;/p&gt;
&lt;p&gt;2015年初在Linode购买了VPS，机房自然选择了亚洲的东京机房。安装的Ubuntu12.04的操作系统，因为对Linx系统不熟，选择了最省事的&lt;a href="http://lnmp.org/"&gt;lnmp&lt;/a&gt; 。lnmp中自带nginx，所以Hexo的部署也就使用nginx做为服务器。&lt;/p&gt;</description></item><item><title>WordPress使用Markdown</title><link>https://fwhyy.com/2015/06/use-markdown-in-wordpress/</link><pubDate>Mon, 22 Jun 2015 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2015/06/use-markdown-in-wordpress/</guid><description>&lt;p&gt;自从知道有Markdown这么个东西后，就彻底喜欢上了。期间也折腾过支持Markdown格式的博客系统，如：Octopress、hexo。之前也写过几篇关于Octopress的博文：&lt;a href="http://fwhyy.com/categories/Octopress/"&gt;http://fwhyy.com/categories/Octopress/&lt;/a&gt;。对于hexo折腾一番后发布到了github上，可以通过&lt;a href="http://oec2003.github.io/"&gt;http://oec2003.github.io/&lt;/a&gt;访问。&lt;/p&gt;
&lt;p&gt;但自从用了独立博客以后，一直使用的是WordPress，去年又迁移到了Linode的VPS上，暂时还没找到好的方式在Linode上部署hexo，所以还是决定在WordPress中使用Markdown。&lt;/p&gt;</description></item><item><title>Linode VPS之旅</title><link>https://fwhyy.com/2015/01/linode-vps-trip/</link><pubDate>Mon, 12 Jan 2015 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2015/01/linode-vps-trip/</guid><description>&lt;p&gt;2010年申请域名&lt;a href="http://fwhyy.com/"&gt;fwhyy.com&lt;/a&gt;，开始搭建独立博客，考虑到VPS的费用过高，当时选择的是易网库的香港主机。这一用就是4年，期间也出现过一些问题、客户响应速度和态度都还算可以，总体评价中规中矩吧。直到最近想把女儿的站点搭起来的时候，才发现我主机空间只支持2个MySql的数据库，跟客服交涉过几次，想将空间中我没有用到的MSSql减少一个，将MySql添加一个，得到的反馈都是要么花钱购买一个MySql，要么升级套餐。无奈之下只好选择搬家了。在朋友推荐下，果断选择了Linode VPS，按我那位朋友的说法，Linode是他用过的最好的VPS，没有之一。&lt;/p&gt;
&lt;h2 id="更换ip"&gt;更换IP&lt;/h2&gt;
&lt;p&gt;使用VPS就意味着一切都得自己来折腾，从安装系统（当然是Linux）、安装软件、部署WordPress等等。在Linode中注册、安装都很顺利，成功安装ubuntu系统后，发现只能在翻墙的状态下才能SSH连接到系统中。肯定是之前使用此IP的朋友做过一些和谐的事情，在朋友的指导下得知需要在系统后台中提交ticket申请更换ip，使用蹩脚的英文经过几番交涉之后终于换ip成功。&lt;/p&gt;
&lt;h2 id="安装软件"&gt;安装软件&lt;/h2&gt;
&lt;p&gt;VPS就像是一个毛坯房，就只有一个空间，什么东西都得靠自己来装，Linux系统之前也接触的很少，所以说没有一颗折腾的心还是不要玩VPS。因为第一次玩VPS，为了降低难度，系统选择的是Ubuntu，这个是在Linode上使用的最多的Linux发行版。架构选择的是LNMP一键安装包，没别的原因就是因为省事。LNMP的使用可以参考下面链接：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lnmp.org/install.html"&gt;http://lnmp.org/install.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;接下来就是做一些基本的配置：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;更新源&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;生成语言包&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo locale-gen --lang zh_CN.UTF-8
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;校正时区&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo dpkg-reconfigure tzdataWordpress 
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="4"&gt;
&lt;li&gt;设置权限&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chmod -R 777 /home/wwwroot/www.fengzihan.me/
chown -R www /home/wwwroot/www.fengzihan.me/
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="5"&gt;
&lt;li&gt;添加虚拟主机&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://lnmp.org/faq/lnmp-vhost-add-howto.html"&gt;http://lnmp.org/faq/lnmp-vhost-add-howto.html&lt;/a&gt;&lt;/p&gt;
&lt;ol start="6"&gt;
&lt;li&gt;Nginx下Wordpress只显示一个主题&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# 编辑php.ini文件，找到disable_functions ，将其后面的函数列表中的scandir删除
vi /usr/local/php/etc/php.ini
# 重启php服务，执行下面命令
/etc/init.d/php-fpm restart
http://www.weisay.com/blog/nginx-wordpress-scandir.html
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="7"&gt;
&lt;li&gt;修改root密码&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo passwd root
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="8"&gt;
&lt;li&gt;安装FTP&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1. 安装vsftpd
sudo apt-get install vsftpd

2. 启动、停止、重启服务
service vsftpd start | stop | restart

3. 添加用户为fengwei的账户，可以方位home目录
useradd fengwei -g ftp -d /home

4. 为fengwei这个账户设置密码
passwd fengwei

5. 修改配置文件
vi /etc/vsftpd.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://lnmp.org/faq/lnmp-vhost-add-howto.html"&gt;http://blog.csdn.net/shuimuzhiyuan/article/details/8548927&lt;/a&gt;
&lt;a href="http://www.blogjava.net/stonestyle/articles/369104.html"&gt;http://www.blogjava.net/stonestyle/articles/369104.html&lt;/a&gt;&lt;/p&gt;
&lt;ol start="9"&gt;
&lt;li&gt;修改mysql上传文件大小&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;find / -name php.ini
usr/local/php/etc/php.ini
vi /usr/local/php/etc/php.ini
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="后记"&gt;后记&lt;/h2&gt;
&lt;p&gt;最后说明下，本文不是一篇入门级教程，只是我初玩VPS的一点记录，一些相关的步骤也在文中给出了参考链接。在一切都安装妥当后的某一天早晨，突然发现博客不能访问了，首先ping了下ip，发现还能ping通，心里石头落下了一半，马上登录到Linode后台准备提交ticket，没想到在后台已经收到了一条客服发来的ticket，大概意思就是发现我VPS的硬盘有故障，正在排查，几分钟后网站恢复正常，对Linode的及时响应速度和处理问题的能力点个赞。&lt;/p&gt;</description></item><item><title>Windows中搭建已存在的Octopress环境</title><link>https://fwhyy.com/2013/08/how-to-use-exist-octopress-in-windows/</link><pubDate>Thu, 15 Aug 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/08/how-to-use-exist-octopress-in-windows/</guid><description>&lt;p&gt;当我们需要在不同的电脑上来对同一个Octopress博客进行维护的时候就需要针对已存在的Octopress来设置环境了，&lt;/p&gt;
&lt;h2 id="安装相应的软件"&gt;安装相应的软件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Git：&lt;a href="http://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe"&gt;http://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby：&lt;a href="http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/rubyinstaller-1.9.3-p429.exe"&gt;http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/rubyinstaller-1.9.3-p429.exe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevKit：&lt;a href="http://cloud.github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe"&gt;http://cloud.github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python：&lt;a href="http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi"&gt;http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于软件的安装在《&lt;a href="http://blog.fwhyy.com/2013/05/how-to-crate-octopress-blog-in-windows/"&gt;Windows下搭建Octopress博客&lt;/a&gt;》中有详细的介绍。&lt;/p&gt;
&lt;h2 id="拉octopress代码到本地"&gt;拉Octopress代码到本地&lt;/h2&gt;
&lt;p&gt;使用下面命令将已存在的Octopress代码拉到本地&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone -b source git@github.com:oec2003/oec2003.github.com.git
git clone git@github.com:oec2003/oec2003.github.com.git _deploy
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="编写文章"&gt;编写文章&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd Octopress
rake new_post[&amp;#39;new post title&amp;#39;]
rake generate
rake preview
rake deploy
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="推送到github"&gt;推送到github&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd Octopress
git add .
git commit -m &amp;#39;message&amp;#39;
git push origin source
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="从github上获取最新"&gt;从github上获取最新&lt;/h2&gt;
&lt;p&gt;比如在公司发布了一篇博文，回到家里想继续发博文，就需要先将github上的最新代码拉到本地：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd Octopress
cd _deploy
git pull origin master
cd ..
git pull origin source
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;今天在家里的另一台电脑上进行生成文章时，发现当执行了命令rake generate 后，生成到public目录中相应的页面为空，没有任何内容，但在命令行中命令还是正常执行了，没有出现异常。最后查出原因是因为Python的安装目录没有添加到环境变量中。所以建议在准备环境时就就将git、ruby、python的安装目录都添加到环境变量中。&lt;/p&gt;</description></item><item><title>Octopress博客设置</title><link>https://fwhyy.com/2013/05/octopress-blog-setting/</link><pubDate>Fri, 31 May 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/05/octopress-blog-setting/</guid><description>&lt;p&gt;在上一篇《&lt;a href="http://blog.fwhyy.com/2013/08/how-to-use-exist-octopress-in-windows/"&gt;Windows下搭建Octopress博客&lt;/a&gt;》中介绍了怎样在Windows环境中搭建Octopress博客，以及如何部署到Github中，本文主要讲解怎样对Octopress进行一些设置，比如修改博客标题、添加侧边栏等等。&lt;/p&gt;
&lt;h2 id="octopress文件目录"&gt;Octopress文件目录&lt;/h2&gt;
&lt;p&gt;首先来看下Octopress的文件目录吧，因为很多的设置就是从这里开始的。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301600903.webp" alt="3cefded1gw1e52yyb8jz7j207f0e5mxp" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;刚clone下来的Octopress源码没有最后的三个文件，当执行了rake install后会产生最后的三个目录。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;source：该目录是执行rake install后从.themes\classic目录中的source拷贝而来，并且添加了一个_posts目录了，当执行了rake new_post[‘title’]后会在_post生成博文的markdown文件。包括后面的很多设置页是在该目录中进行&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sass：也是在执行rake install后从.themes\classic目录中的source拷贝而来。Sass 扩展了 CSS3，增加了规则、变量、混入、选择器、继承等等特性。Sass 生成良好格式化的 CSS 代码，易于组织和维护&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;public：刚clone源码时public是个空目录，当执行了rake generate后会编译source的内容然后将编译后的内容复制到public目录中，在执行rake deploy后也是讲public的内容推送到服务器上，我们最终访问到的也是public的内容。这个目录中的内容一般不用我们手动修改，执行rake generate来生成。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基本设置"&gt;基本设置&lt;/h2&gt;
&lt;p&gt;在Octopress目录中有一个名为_config.yml的文件：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;url: [http://oec2003.github.io](http://oec2003.github.io/) #网站地址

title: 冯威的个人博客 
#网站标题

subtitle: 临渊羡鱼 不如退而结网. 
#网站副标题

author: 冯威 #网站作者，通常显示在页尾和每篇文章的尾部

simple_search: [http://google.com/search](http://google.com/search) # 搜索引擎

description: #网站的描述，出现在HTML页面中的 meta 中的 description
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在使用rake new_post[&amp;rsquo;title&amp;rsquo;]生成的markdown文件中，可以对每篇博文进行一些设置：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;layout: post

title: &amp;#34;我的第一篇Octopress博客&amp;#34; #文章标题

date: 2013-05-26 18:49 #文章发布时间

comments: true #是否允许评论

categories: Octopress #文章分类
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="设置网站的description和keywords"&gt;设置网站的description和keywords&lt;/h2&gt;
&lt;p&gt;在网页的head部分设置name为description和keywords的meta元素可以让网页更容易被搜索引擎搜索到，下面说说怎样在Octopress中设置首页和每篇博文的description和keywords。&lt;/p&gt;
&lt;h2 id="设置首页"&gt;设置首页&lt;/h2&gt;
&lt;p&gt;打开source/index.html文件，在文件的头部添加相应内容：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;layout: default

#下面为添加的内容

description: &amp;#34;冯威的个人博客&amp;#34;

keywords: Asp.Net,C#
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="设置文章"&gt;设置文章&lt;/h2&gt;
&lt;p&gt;文章的设置直接在每篇文章对应的markdown文件的头部添加相应内容即可：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;layout: post

title: &amp;#34;我的第一篇Octopress博客&amp;#34;

date: 2013-05-26T18:49:00+08:00
comments: true

categories: Octopress

#下面为新增内容

description: &amp;#34;我的第一篇Octopress博客&amp;#34;

keywords: Octopress
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="导航栏设置"&gt;导航栏设置&lt;/h2&gt;
&lt;p&gt;打开文件&lt;code&gt;source\_includes\custom\navigation.html&lt;/code&gt;，默认情况下如下所示：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=”{{ root_url }}/”&amp;gt;Blog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=”{{ root_url }}/blog/archives”&amp;gt;Archives&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以将Blog和Archives修改为首页和归档，不过记得将包含有中文的文件保存为无BOM的UTF-8编码格式。也可以在此添加一个标签页，比如加上一个关于，我们可以按下面步骤实现：&lt;/p&gt;
&lt;p&gt;使用命令rake new_page[&amp;lsquo;about&amp;rsquo;]创建一个页面，页面路径为source\about\index.markdown;&lt;/p&gt;
&lt;p&gt;修改上面的navigation.html为：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=”{{ root_url }}/”&amp;gt;首页&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=”{{ root_url }}/blog/archives”&amp;gt;归档&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=”{{ root_url }}/about”&amp;gt;关于&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;显示效果如下：&lt;/p&gt;</description></item><item><title>Windows下搭建Octopress博客</title><link>https://fwhyy.com/2013/05/how-to-crate-octopress-blog-in-windows/</link><pubDate>Mon, 27 May 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/05/how-to-crate-octopress-blog-in-windows/</guid><description>&lt;h2 id="您需要掌握的"&gt;您需要掌握的&lt;/h2&gt;
&lt;p&gt;使用Octopress来搭建博客，还是有一定门槛的，看完本文后，希望您不会觉得很难。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://octopress.org/"&gt;Octopress&lt;/a&gt; 是一款基于 &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; 的静态站点生成系统，使用Ruby实现，所以您需要懂点Ruby的知识，其实会几个命令就行；&lt;/p&gt;
&lt;p&gt;Octopress的博客内容是通过Markdown来书写，所以您需要了解Markdown的编写规则，&lt;a href="http://wowubuntu.com/markdown/"&gt;Markdown 语法说明&lt;/a&gt;可以让你在几分钟之内熟悉Markdown的语法，在Windows下可以使用MarkDown Pad或是使用在线的编辑器&lt;a href="http://mahua.jser.me/"&gt;http://mahua.jser.me/&lt;/a&gt;进行编辑；&lt;/p&gt;
&lt;p&gt;Octopress通常会部署在&lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;上，所以您需要会一些简单的Git命令以及Gtihub的使用。&lt;/p&gt;
&lt;h2 id="准备"&gt;准备&lt;/h2&gt;
&lt;p&gt;系统：Windows 2003 Server、Windows 7、Windows 2008R2 Server，这三个系统用下面的版本都安装成功过；&lt;/p&gt;
&lt;p&gt;Git：&lt;a href="http://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe"&gt;http://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ruby：&lt;a href="http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/rubyinstaller-1.9.3-p429.exe"&gt;http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/rubyinstaller-1.9.3-p429.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DevKit：&lt;a href="http://cloud.github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe"&gt;http://cloud.github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Python：&lt;a href="http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi"&gt;http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Octopress：&lt;a href="git://github.com/imathis/octopress.git"&gt;git://github.com/imathis/octopress.git&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;h3 id="安装git"&gt;安装Git&lt;/h3&gt;
&lt;p&gt;Windows下安装Git很简单，一路next就可以了。&lt;/p&gt;
&lt;h3 id="安装ruby"&gt;安装Ruby&lt;/h3&gt;
&lt;p&gt;Ruby的安装也是一路next就可以，不过记得勾选“Add Ruby executables to your PATH”，将Ruby的执行路径加入到环境变量中，如果忘记勾选，也可以手动设置。安装完后可以在命令提示符中输入ruby –version 来确认是否安装成功。&lt;/p&gt;
&lt;h3 id="安装devkit"&gt;安装DevKit&lt;/h3&gt;
&lt;p&gt;DevKit下载下来的是一个自压缩文件，我们将其解压到D:/DevKit，有两点需要注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解压目录中没有有中文和空格；&lt;/li&gt;
&lt;li&gt;必须先安装Ruby，而且Ruby需要是RubyInstallser安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;解压DevKit后，在命令行输入以下命令来进行安装：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;d: 
cd DevKit
ruby dk.rb init 
ruby dk.rb install
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="安装python"&gt;安装Python&lt;/h3&gt;
&lt;p&gt;安装Python,也是一路next就可以，博客的代码高亮用到了Python的Pygments模块，在Python中安装第三方库需要使用easy_install，在下面地址下载跟Python相对应的安装程序安装后就可以使用easy_install了。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pypi.python.org/pypi/setuptools"&gt;https://pypi.python.org/pypi/setuptools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;easy_install会安装在Python安装目录的Scripts目录中，例如我的Python目录是C:\Python27，所以需要将C:\Python27\Scripts目录加入到环境变量中才能在命令提示符中使用easy_install命令。&lt;/p&gt;
&lt;p&gt;在命令提示符中输入如下命令就可以安装Pygments了。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;easy_install pygments
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="安装octopress"&gt;安装Octopress&lt;/h3&gt;
&lt;p&gt;首先在GitBash中输入如下命令将Octopress代码拉到本地，&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd d:/GitProject
git clone git://github.com/imathis/octopress.git octopress
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后需要安装Octopress的依赖项，安装依赖项需要用到Ruby的gem，使用下面的命令可以更换gem的更新源，使用国内的淘宝镜像速度相对快点。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gem sources -a http://ruby.taobao.org/
gem sources -r http://rubygems.org/
gem sources -l
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;修改Octopress目录下的Gemfile文件，将第一行的&lt;a href="http://rubygems.org/"&gt;http://rubygems.org/&lt;/a&gt; 修改为&lt;a href="http://ruby.taobao.org/"&gt;http://ruby.taobao.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在命令提示符中进入到Octopress目录，输入下面命令进行依赖项的安装&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gem install bundler
bundle install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输入下面的命令来安装Octopress的默认主题&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rake install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;到此所有的安装工作已经结束，输入下面的命令可以在本地进行预览。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rake preview
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;预览效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300659290.webp" alt="27113147-1ad59a8165304434a89f6573bbc1cdb8" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;h2 id="解决中文问题"&gt;解决中文问题&lt;/h2&gt;
&lt;p&gt;如果博客中包含中文，需要进行如下设置：&lt;/p&gt;
&lt;p&gt;1.在环境变量中设置下面的键值对&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.含有中文的文件需要保存为UTF-8无BOM格式编码。&lt;/p&gt;
&lt;p&gt;3.在Ruby的安装路径找到 文件convertible.rb&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;C:\Ruby193\lib\ruby\gems\1.9.1\gems\jekyll-0.12.0\lib\jekyll\convertible.rb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将27行修改为：&lt;code&gt;self.content = File.read(File.join(base, name), :encoding =&amp;amp;gt; 'utf-8')&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="在octopress中添加文章"&gt;在Octopress中添加文章&lt;/h2&gt;
&lt;p&gt;使用下面命令可以在Octopress中添加文章&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300700883.webp" alt="27113202-1205db84b8574b35b872a518d77a6c03" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;注意，rake new_post[&amp;lsquo;my first octopress blog&amp;rsquo;]中的my first octopress blog 并不是博客标题，而是和生成的文件名以及url地址有关，该名称不支持中文。博客标题可以在生成的markdown文件中修改。生成的markdown文件在octopress/source/_posts目录中。&lt;/p&gt;
&lt;p&gt;编辑markdown文件，将标题可以修改为中文标题，还可以设置分类等信息以及编写正文部分&lt;/p&gt;</description></item><item><title>通过修改数据库的方式禁用WordPress插件</title><link>https://fwhyy.com/2013/01/unenabled-wordpress-plug-in-for-update-database/</link><pubDate>Fri, 04 Jan 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/01/unenabled-wordpress-plug-in-for-update-database/</guid><description>&lt;p&gt;最近个人博客的空间到期了，之前的是香港的空间，这次看见美国空间做活动感觉比较划算就换了美国空间，需要将原空间中的程序源文件备份下来，上传到新的美国空间中，这么一折腾折腾出问题了。&lt;/p&gt;
&lt;p&gt;为了防止垃圾评论，我在博客中安装了一个验证码的插件，这次换空间后，发现插件不能使用了（出现的图片什么都不显示），导致后台管理登陆不进去，Google之，发现可以通过修改数据库的方式来禁用插件，在wp_options表的option_name列下，找到active_plugins行 ，查询出该行的option_value值为&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a:12:{i:0;s:19:”akismet/akismet.php”;i:1;s:23:”antivirus/antivirus.php”;i:2;s:33:”configure-smtp/configure-smtp.php”;i:3;s:35:”delete-revision/delete-revision.php”;i:4;s:36:”google-sitemap-generator/sitemap.php”;i:5;s:43:”guestbook-generator/guestbook_generator.php”;i:6;s:39:”si-captcha-for-wordpress/si-captcha.php”;i:7;s:29:”wp-db-backup/wp-db-backup.php”;i:8;s:23:”wp-kit-cn/wp-kit-cn.php”;i:9;s:27:”wp-pagenavi/wp-pagenavi.php”;i:10;s:33:”wp-security-scan/securityscan.php”;i:11;s:35:”wp-utf8-excerpt/wp-utf8-excerpt.php”;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上面值中的i:6;s:39:”si-captcha-for-wordpress/si-captcha.php”; 为验证码插件的启用代码，将其删除后保存即可。&lt;/p&gt;
&lt;p&gt;验证码插件禁用了，登陆后却报错了，貌似是什么方法找不到了，因为不怎么熟PHP，就不纠结了，直接按之前的一篇博文《&lt;a href="http://blog.fwhyy.com/2012/04/wordpress-upgrade-is-very-simple/"&gt;WordPress升级其实很简单&lt;/a&gt;》中的方法将WordPress升级，问题解决。&lt;/p&gt;</description></item><item><title>插件和代码两种方法搞定WordPress回复邮件通知</title><link>https://fwhyy.com/2011/01/the-two-methods-get-the-wordpress-plugin-and-code-reply-email-notification/</link><pubDate>Fri, 07 Jan 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/01/the-two-methods-get-the-wordpress-plugin-and-code-reply-email-notification/</guid><description>&lt;p&gt;为了更好的互动，当有人在博客中评论时，我们肯定是希望能够马上知晓，WordPress中默认不提供这样的功能，需要通过插件或是添加代码的方式来实现。&lt;/p&gt;
&lt;h2 id="使用插件"&gt;使用插件&lt;/h2&gt;
&lt;p&gt;使用插件的方式非常简单，安装好插件在后台做相应的配置就好了。现在比较流行的插件是&lt;a href="http://wordpress.org/extend/plugins/wordpress-thread-comment/"&gt;WordPress Thread Comment&lt;/a&gt;，下面详细介绍下步骤&lt;/p&gt;
&lt;p&gt;1 下载解压后上传到plugin目录中。&lt;/p&gt;
&lt;p&gt;2 进入WordPress后台，在“设置”选项卡中点击讨论，在右边的界面中配置何时发送电子邮件。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302117565.webp" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;3 进入到插件管理中，启用 &lt;a href="http://wordpress.org/extend/plugins/wordpress-thread-comment/"&gt;WordPress Thread Comment&lt;/a&gt; 插件。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302118052.webp" alt="2011-01-07_122446" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;4 启用插件后在“设置”下面会多出&lt;a href="http://wordpress.org/extend/plugins/wordpress-thread-comment/"&gt;WordPress Thread Comment&lt;/a&gt; 选项，点击该项在右边的界面中就可以进行相关设置。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302118810.webp" alt="2011-01-07_122651" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;使用代码&lt;/p&gt;
&lt;p&gt;使用代码的方式其实也并不复杂，代码可以很容易在网上找到。&lt;/p&gt;
&lt;p&gt;1 点击“外观”下的编辑。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302118932.webp" alt="2011-01-07_123309" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;2 在右侧的文件列表中找到functions.php。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302119677.webp" alt="2011-01-07_123455" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;3 点击该文件，在中间的编辑区域添加如下代码。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/* 有评论时发送邮件 函数 开始*/
function comment_mail_notify($comment_id) {
 $admin_notify = &amp;#39;1&amp;#39;; // admin 要不要收回复通知 ( &amp;#39;1&amp;#39;=要 ; &amp;#39;0&amp;#39;=不要 )
 $admin_email = get_bloginfo (&amp;#39;admin_email&amp;#39;); // $admin_email 可改为你指定的 e-mail.
 $comment = get_comment($comment_id);
 $comment_author_email = trim($comment-&amp;gt;comment_author_email);
 $parent_id = $comment-&amp;gt;comment_parent ? $comment-&amp;gt;comment_parent : &amp;#39;&amp;#39;;
 global $wpdb;
 if ($wpdb-&amp;gt;query(&amp;#34;Describe {$wpdb-&amp;gt;comments} comment_mail_notify&amp;#34;) == &amp;#39;&amp;#39;)
 $wpdb-&amp;gt;query(&amp;#34;ALTER TABLE {$wpdb-&amp;gt;comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;&amp;#34;);
 if (($comment_author_email != $admin_email &amp;amp;&amp;amp; isset($_POST[&amp;#39;comment_mail_notify&amp;#39;])) || ($comment_author_email == $admin_email &amp;amp;&amp;amp; $admin_notify == &amp;#39;1&amp;#39;))
 $wpdb-&amp;gt;query(&amp;#34;UPDATE {$wpdb-&amp;gt;comments} SET comment_mail_notify=&amp;#39;1&amp;#39; WHERE comment_ID=&amp;#39;$comment_id&amp;#39;&amp;#34;);
 $notify = $parent_id ? get_comment($parent_id)-&amp;gt;comment_mail_notify : &amp;#39;0&amp;#39;;
 $spam_confirmed = $comment-&amp;gt;comment_approved;
 if ($parent_id != &amp;#39;&amp;#39; &amp;amp;&amp;amp; $spam_confirmed != &amp;#39;spam&amp;#39; &amp;amp;&amp;amp; $notify == &amp;#39;1&amp;#39;) {
 $wp_email = &amp;#39;no-reply@&amp;#39; . preg_replace(&amp;#39;#^www\.#&amp;#39;, &amp;#39;&amp;#39;, strtolower($_SERVER[&amp;#39;SERVER_NAME&amp;#39;])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
 $to = trim(get_comment($parent_id)-&amp;gt;comment_author_email);
 $subject = &amp;#39;您在 [&amp;#39; . get_option(&amp;#34;blogname&amp;#34;) . &amp;#39;] 的留言有了回复&amp;#39;;
 $message = &amp;#39;
 &amp;lt;div style=&amp;#34;background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;&amp;#34;&amp;gt;
 &amp;lt;p&amp;gt;&amp;#39; . trim(get_comment($parent_id)-&amp;gt;comment_author) . &amp;#39;, 您好!&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;您曾在《&amp;#39; . get_the_title($comment-&amp;gt;comment_post_ID) . &amp;#39;》的留言:&amp;lt;br /&amp;gt;&amp;#39;
 . trim(get_comment($parent_id)-&amp;gt;comment_content) . &amp;#39;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;&amp;#39; . trim($comment-&amp;gt;comment_author) . &amp;#39; 给您的回复:&amp;lt;br /&amp;gt;&amp;#39;
 . trim($comment-&amp;gt;comment_content) . &amp;#39;&amp;lt;br /&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;您可以点击&amp;lt;a href=&amp;#34;&amp;#39; . htmlspecialchars(get_comment_link($parent_id)) . &amp;#39;&amp;#34;&amp;gt;查看回复的完整內容&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;还要再度光临 &amp;lt;a href=&amp;#34;&amp;#39; . get_option(&amp;#39;home&amp;#39;) . &amp;#39;&amp;#34;&amp;gt;&amp;#39; . get_option(&amp;#39;blogname&amp;#39;) . &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;(此邮件由系统自动发送，请勿回复.)&amp;lt;/p&amp;gt;
 &amp;lt;/div&amp;gt;&amp;#39;;
 $from = &amp;#34;From: \&amp;#34;&amp;#34; . get_option(&amp;#39;blogname&amp;#39;) . &amp;#34;\&amp;#34; &amp;lt;$wp_email&amp;gt;&amp;#34;;
 $headers = &amp;#34;$from\nContent-Type: text/html; charset=&amp;#34; . get_option(&amp;#39;blog_charset&amp;#39;) . &amp;#34;\n&amp;#34;;
 wp_mail( $to, $subject, $message, $headers );
 //echo &amp;#39;mail to &amp;#39;, $to, &amp;#39;&amp;lt;br/&amp;gt; &amp;#39; , $subject, $message; // for testing
 }
}
add_action(&amp;#39;comment_post&amp;#39;, &amp;#39;comment_mail_notify&amp;#39;);

/* 自动加勾选栏 */
function add_checkbox() {
 echo &amp;#39;&amp;lt;input type=&amp;#34;checkbox&amp;#34; name=&amp;#34;comment_mail_notify&amp;#34; id=&amp;#34;comment_mail_notify&amp;#34; value=&amp;#34;comment_mail_notify&amp;#34; checked=&amp;#34;checked&amp;#34; style=&amp;#34;margin-left:20px;&amp;#34; /&amp;gt;&amp;lt;label for=&amp;#34;comment_mail_notify&amp;#34;&amp;gt;邮件通知&amp;lt;/label&amp;gt;&amp;#39;;
}
add_action(&amp;#39;comment_form&amp;#39;, &amp;#39;add_checkbox&amp;#39;);
/* 有评论时发送邮件 函数 结束*/
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="配置smtp"&gt;配置SMTP&lt;/h2&gt;
&lt;p&gt;光进行了上面的步骤可能还不行，还需要配置SMTP，装一个Configure SMTP的插件就可以很方便的进行配置，关于插件的安装启用上面已经说过。&lt;/p&gt;</description></item><item><title>推广blog四妙招！</title><link>https://fwhyy.com/2006/12/to-promote-the-blog-four-tips/</link><pubDate>Thu, 21 Dec 2006 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2006/12/to-promote-the-blog-four-tips/</guid><description>&lt;p&gt;写blog有一段时间了，虽然不是很长但达到现在的访问量已让我很满意了。在写blog的这段时间里学习到了很多同时也总结出了一些推广自己blog的方法：&lt;/p&gt;
&lt;p&gt;1、我们每个人的blog内容应该都和自己的兴趣爱好有关，所以我们可以在自己感兴趣的方面写出一些好的文章，然后到一些相应的论坛去发贴或是回贴随便把自己的blog推广出去。如blog内容是IT相关的就可以到CSDN或是一些大的门户网站的IT论坛去推广。&lt;/p&gt;
&lt;p&gt;2、在网上见到很多人在blog里贴上一些比较暴露的图片或是在一些色情网站设置相应当链接来提高blog的点击率。虽然这种方法的效果还可以，但我个人不是十分同，在以前的文章中我说过blog不仅仅可以让我们来学习而且还能建立我们的个人品牌，如果使用这种方式个人的形象会受到损害，更无从谈起个人品牌了。我们写blog的目的是为了结交朋友，有一个更好的学习交流的平台，提升自我素质，而不仅仅是点击率。所以强烈建议用提高文章质量的方式来获得广大网友的喜欢。&lt;/p&gt;
&lt;p&gt;3、自己东奔西跑，到处逛论坛，相同学朋友推荐，不如把这些事情交给一些特定的网站来做，在这儿推荐两个推广blog的网站：博客砖和中文博客群。在我blog首页的左边博客推荐栏目下有这两个网站的相应链接。大家可以进去看看，只需要通过简单点注册就可以让您的blog在他们的网站占有一席之地。是一个推广blog的好途径&lt;/p&gt;
&lt;p&gt;4、如果你是一个兴趣广泛的人，你就可以加入很多的博客圈，这样很多的博友都能看到你的文章，也可以达到推广自己blog的目的。&lt;/p&gt;
&lt;p&gt;总之不管使用什么方法，最重要的一点还是要内容好，有特色，这样你才会有一群固定的读者，才会创建好你的个人品牌。&lt;/p&gt;</description></item></channel></rss>