scriptorium 0.0.3 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.lt3 +324 -0
- data/README.md +3155 -1
- data/assets/.DS_Store +0 -0
- data/assets/README.md +44 -0
- data/assets/icons/social/reddit.png +0 -0
- data/assets/icons/social/x-logo.png +0 -0
- data/assets/icons/ui/.DS_Store +0 -0
- data/assets/icons/ui/back.png +0 -0
- data/assets/icons/ui/copy.png +0 -0
- data/assets/icons/ui/down.png +0 -0
- data/assets/icons/ui/end.png +0 -0
- data/assets/icons/ui/exit.png +0 -0
- data/assets/icons/ui/foo +10 -0
- data/assets/icons/ui/home.png +0 -0
- data/assets/icons/ui/left.png +0 -0
- data/assets/icons/ui/next.png +0 -0
- data/assets/icons/ui/right.png +0 -0
- data/assets/icons/ui/start.png +0 -0
- data/assets/icons/ui/up.png +0 -0
- data/assets/imagenotfound.jpg +0 -0
- data/assets/samples/placeholder.svg +9 -0
- data/assets/themes/standard/favicon.svg +6 -0
- data/bin/sblog +84 -5
- data/bin/scriptorium +1 -0
- data/doc/README.txt +6 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +94 -0
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +2 -0
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +45 -0
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +35 -0
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +27 -0
- data/doc/anti-amnesia/20250807-213025.md +116 -0
- data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
- data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
- data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
- data/doc/banner_svg_config.md +114 -0
- data/doc/contrib.lt3 +8 -0
- data/doc/dependencies.md +281 -0
- data/doc/hacker.lt3 +5 -0
- data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
- data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
- data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
- data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
- data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
- data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
- data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
- data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
- data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
- data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
- data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
- data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
- data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
- data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
- data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
- data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
- data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
- data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
- data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
- data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
- data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
- data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
- data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
- data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
- data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
- data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
- data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
- data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
- data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
- data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
- data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
- data/doc/imported/0018-ruby-puns/post.html +46 -0
- data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
- data/doc/imported/0020-fffff/metadata.txt +7 -0
- data/doc/imported/0020-fffff/post.html +24 -0
- data/doc/imported/0020-fffff/source.lt3 +12 -0
- data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
- data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
- data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
- data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
- data/doc/imported/0023-doctor-sleep/post.html +63 -0
- data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
- data/doc/imported/0024-just-a-test/metadata.txt +7 -0
- data/doc/imported/0024-just-a-test/post.html +24 -0
- data/doc/imported/0024-just-a-test/source.lt3 +12 -0
- data/doc/imported/import_summary.txt +98 -0
- data/doc/livetext-informal-spec.txt +65 -0
- data/doc/myuserdoc/ch-0.lt3 +31 -0
- data/doc/myuserdoc/ch-1.lt3 +37 -0
- data/doc/myuserdoc/ch-10.lt3 +22 -0
- data/doc/myuserdoc/ch-2.lt3 +37 -0
- data/doc/myuserdoc/ch-3.lt3 +19 -0
- data/doc/myuserdoc/ch-4.lt3 +43 -0
- data/doc/myuserdoc/ch-5.lt3 +22 -0
- data/doc/myuserdoc/ch-6.lt3 +19 -0
- data/doc/myuserdoc/ch-7.lt3 +16 -0
- data/doc/myuserdoc/ch-8.lt3 +13 -0
- data/doc/myuserdoc/ch-9.lt3 +19 -0
- data/doc/myuserdoc/tweak.rb +18 -0
- data/doc/myuserdoc/userdoc-toc.txt +88 -0
- data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
- data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
- data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
- data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
- data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
- data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
- data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
- data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
- data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
- data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
- data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
- data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
- data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
- data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
- data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
- data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
- data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
- data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
- data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
- data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
- data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
- data/doc/old-posts/0024-just-a-test.lt3 +12 -0
- data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
- data/doc/old-repo +1 -0
- data/doc/reddit_credentials_template.json +8 -0
- data/doc/reddit_integration.md +207 -0
- data/doc/user.lt3 +35 -0
- data/doc/user_guide_section_1.md +137 -0
- data/doc/user_guide_section_10.md +515 -0
- data/doc/user_guide_section_11.md +708 -0
- data/doc/user_guide_section_2.md +233 -0
- data/doc/user_guide_section_3.md +5 -0
- data/doc/user_guide_section_4.md +221 -0
- data/doc/user_guide_section_5.md +243 -0
- data/doc/user_guide_section_6.md +147 -0
- data/doc/user_guide_section_7.md +311 -0
- data/doc/user_guide_section_8.md +224 -0
- data/doc/user_guide_section_9.md +375 -0
- data/lib/rouge/lexers/livetext.rb +74 -0
- data/lib/scriptorium/api.rb +2373 -0
- data/lib/scriptorium/banner_svg.rb +729 -0
- data/lib/scriptorium/contract.rb +34 -0
- data/lib/scriptorium/exceptions.rb +201 -1
- data/lib/scriptorium/helpers.rb +675 -0
- data/lib/scriptorium/post.rb +259 -0
- data/lib/scriptorium/reddit.rb +83 -0
- data/lib/scriptorium/repo.rb +938 -0
- data/lib/scriptorium/standard_files.rb +149 -0
- data/lib/scriptorium/support/bootstrap/css.txt +5 -0
- data/lib/scriptorium/support/bootstrap/js.txt +4 -0
- data/lib/scriptorium/support/common_js/clipboard.js +35 -0
- data/lib/scriptorium/support/common_js/content-loader.js +187 -0
- data/lib/scriptorium/support/common_js/navigation.js +52 -0
- data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
- data/lib/scriptorium/support/config/reddit.txt +10 -0
- data/lib/scriptorium/support/config/reddit_template.txt +17 -0
- data/lib/scriptorium/support/config/social.txt +8 -0
- data/lib/scriptorium/support/highlight/css.txt +2 -0
- data/lib/scriptorium/support/highlight/custom.css +119 -0
- data/lib/scriptorium/support/highlight/js.txt +1 -0
- data/lib/scriptorium/support/post_index/config.txt +15 -0
- data/lib/scriptorium/support/post_index/style.css +55 -0
- data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
- data/lib/scriptorium/support/templates/initial_post.lt3 +12 -0
- data/lib/scriptorium/support/templates/layout.txt +5 -0
- data/lib/scriptorium/support/templates/post.lt3 +104 -0
- data/lib/scriptorium/support/theme/footer.lt3 +2 -0
- data/lib/scriptorium/support/theme/header.lt3 +4 -0
- data/lib/scriptorium/support/theme/left.lt3 +3 -0
- data/lib/scriptorium/support/theme/main.lt3 +5 -0
- data/lib/scriptorium/support/theme/right.lt3 +3 -0
- data/lib/scriptorium/theme.rb +192 -0
- data/lib/scriptorium/version.rb +1 -1
- data/lib/scriptorium/view.rb +1021 -0
- data/lib/scriptorium/widgets/featured_posts.rb +149 -0
- data/lib/scriptorium/widgets/links.rb +112 -0
- data/lib/scriptorium/widgets/pages.rb +133 -0
- data/lib/scriptorium/widgets/widget.rb +133 -0
- data/lib/scriptorium.rb +38 -34
- data/lib/skeleton.rb +10 -1
- data/scriptorium.gemspec +17 -5
- data/test/README.md +69 -0
- data/test/WEB_INTEGRATION_README.md +196 -0
- data/test/all +83 -0
- data/test/api_demo.rb +99 -0
- data/test/assets/imagenotfound.jpg +0 -0
- data/test/assets/images/.DS_Store +0 -0
- data/test/assets/images/README.md +27 -0
- data/test/assets/images/odd_aspect.png +0 -0
- data/test/assets/images/perfect.png +0 -0
- data/test/assets/images/small.png +0 -0
- data/test/assets/images/tall.png +0 -0
- data/test/assets/images/very_tall.png +0 -0
- data/test/assets/images/very_wide.png +0 -0
- data/test/assets/images/wide.png +0 -0
- data/test/assets/testbanner.jpg +0 -0
- data/test/banner_svg/simple_helpers.rb +13 -0
- data/test/banner_svg/unit.rb +1000 -0
- data/test/config/deployment.txt +5 -0
- data/test/ed_test.rb +204 -0
- data/test/integration/cursor_banner_combinations.rb +193 -0
- data/test/integration/cursor_banner_features.rb +374 -0
- data/test/integration/integration_test.rb +326 -0
- data/test/integration/preview_flow_test.rb +94 -0
- data/test/livetext_plugin_test.rb +500 -0
- data/test/manual/asset_mgmt.rb +67 -0
- data/test/manual/banner-tests/index.html +45 -0
- data/test/manual/banner-tests/svg.txt +3 -0
- data/test/manual/banner-tests/test01.html +122 -0
- data/test/manual/banner-tests/test02.html +122 -0
- data/test/manual/banner-tests/test03.html +122 -0
- data/test/manual/banner-tests/test04.html +129 -0
- data/test/manual/banner-tests/test05.html +129 -0
- data/test/manual/banner-tests/test06.html +129 -0
- data/test/manual/banner-tests/test07.html +129 -0
- data/test/manual/banner-tests/test08.html +123 -0
- data/test/manual/banner-tests/test09.html +123 -0
- data/test/manual/banner-tests/test10.html +123 -0
- data/test/manual/banner-tests/test11.html +123 -0
- data/test/manual/banner-tests/test12.html +123 -0
- data/test/manual/banner-tests/test13.html +123 -0
- data/test/manual/banner-tests/test14.html +123 -0
- data/test/manual/banner-tests/test15.html +122 -0
- data/test/manual/banner-tests/test16.html +122 -0
- data/test/manual/banner-tests/test17.html +122 -0
- data/test/manual/banner-tests/test18.html +132 -0
- data/test/manual/banner-tests/test19.html +132 -0
- data/test/manual/banner-tests/test20.html +132 -0
- data/test/manual/banner-tests/test21.html +132 -0
- data/test/manual/banner-tests/test22.html +132 -0
- data/test/manual/banner-tests/test23.html +132 -0
- data/test/manual/banner-tests/test24.html +132 -0
- data/test/manual/banner-tests/test25.html +131 -0
- data/test/manual/banner_environment.rb +205 -0
- data/test/manual/codemirror_demo.html +773 -0
- data/test/manual/create_posts_for_web.rb +114 -0
- data/test/manual/environment.rb +67 -0
- data/test/manual/make_banner.rb +153 -0
- data/test/manual/preview_manual_test.rb +129 -0
- data/test/manual/sample_banner_config.txt +12 -0
- data/test/manual/test_advanced_widgets.rb +73 -0
- data/test/manual/test_banner_combinations.rb +120 -0
- data/test/manual/test_banner_features.rb +306 -0
- data/test/manual/test_banner_integration.rb +115 -0
- data/test/manual/test_banner_radial.rb +87 -0
- data/test/manual/test_basic_posts.rb +47 -0
- data/test/manual/test_layout_widgets.rb +40 -0
- data/test/manual/test_pagination.rb +24 -0
- data/test/manual/test_random_posts.rb +38 -0
- data/test/manual/test_syntax_highlighting.rb +167 -0
- data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
- data/test/rubytext/rubytext_demo_test.rb +42 -0
- data/test/rubytext/rubytext_testing_guide.md +277 -0
- data/test/run_automated_tests.rb +45 -0
- data/test/staging/.DS_Store +0 -0
- data/test/support/preview_utils.rb +88 -0
- data/test/syntax_highlighting_test.lt3 +124 -0
- data/test/test_gem_assets.rb +48 -0
- data/test/test_helpers.rb +240 -0
- data/test/tui_editor_integration_test.rb +296 -0
- data/test/tui_integration_test.rb +883 -0
- data/test/unit/api.rb +1776 -0
- data/test/unit/asset_management.rb +219 -0
- data/test/unit/backup_test.rb +451 -0
- data/test/unit/clipboard_test.rb +60 -0
- data/test/unit/contract_test.rb +69 -0
- data/test/unit/core.rb +1211 -0
- data/test/unit/deploy_config_test.rb +248 -0
- data/test/unit/deploy_test.rb +478 -0
- data/test/unit/edit_post_test.rb +168 -0
- data/test/unit/gem_asset_management.rb +183 -0
- data/test/unit/livetext_basic.rb +57 -0
- data/test/unit/livetext_compatibility.rb +82 -0
- data/test/unit/parse_cmd_test.rb +260 -0
- data/test/unit/permalink_copy_test.rb +211 -0
- data/test/unit/post.rb +309 -0
- data/test/unit/post_index_config_test.rb +258 -0
- data/test/unit/post_state_helpers_test.rb +137 -0
- data/test/unit/read_commented_file_test.rb +278 -0
- data/test/unit/reddit_test.rb +235 -0
- data/test/unit/repo.rb +569 -0
- data/test/unit/social_test.rb +366 -0
- data/test/unit/syntax_highlighting.rb +70 -0
- data/test/unit/theme_management_test.rb +91 -0
- data/test/unit/view.rb +498 -0
- data/test/unit/widgets.rb +669 -0
- data/test/web_integration_test.rb +231 -0
- data/test/web_test_helper.rb +218 -0
- data/test/web_workflow_test.rb +527 -0
- data/test/wizard_test.rb +123 -0
- data/ui/README.md +67 -0
- data/ui/common/lib/ui_common.rb +8 -0
- data/ui/rubytext/README.md +191 -0
- data/ui/rubytext/bin/scriptorium-rubytext +402 -0
- data/ui/rubytext/lib/rubytext_ui.rb +300 -0
- data/ui/tui/bin/scriptorium +1890 -0
- data/ui/tui/test/tui_test.rb +23 -0
- data/ui/web/app/app.rb +2600 -0
- data/ui/web/app/assets/livetext_mode.js +244 -0
- data/ui/web/app/error_helpers.rb +150 -0
- data/ui/web/app/views/advanced_config.erb +196 -0
- data/ui/web/app/views/asset_management.erb +645 -0
- data/ui/web/app/views/backup_management.erb +238 -0
- data/ui/web/app/views/banner_config.erb +200 -0
- data/ui/web/app/views/config_widget.erb +232 -0
- data/ui/web/app/views/configure_view.erb +401 -0
- data/ui/web/app/views/dashboard.erb +154 -0
- data/ui/web/app/views/deploy_config.erb +149 -0
- data/ui/web/app/views/edit_pages.erb +363 -0
- data/ui/web/app/views/edit_post.erb +175 -0
- data/ui/web/app/views/edit_theme.erb +73 -0
- data/ui/web/app/views/edit_theme_file.erb +74 -0
- data/ui/web/app/views/error_page.erb +29 -0
- data/ui/web/app/views/header_config.erb +155 -0
- data/ui/web/app/views/layout_config.erb +147 -0
- data/ui/web/app/views/navbar_config.erb +411 -0
- data/ui/web/app/views/theme_management.erb +130 -0
- data/ui/web/app/views/view_dashboard.erb +779 -0
- data/ui/web/app/views/widgets.erb +249 -0
- data/ui/web/bin/scriptorium-web +164 -0
- data/ui/web/test/web_basic_test.rb +38 -0
- data/ui/web/test_navbar.txt +7 -0
- data/ui/web/tmp/timing.log +17 -0
- data/ui/web/tmp/web_server.log +0 -0
- metadata +434 -8
- data/lib/scriptorium/engine.rb +0 -22
- data/test/engine/unit.rb +0 -44
@@ -0,0 +1,137 @@
|
|
1
|
+
# 1. Core Concepts
|
2
|
+
|
3
|
+
## What is Scriptorium?
|
4
|
+
|
5
|
+
Scriptorium is a static site generator designed for creating and managing multiple blogs or content sites from a single installation. It combines the simplicity of static file generation with the power of a multi-view architecture, allowing you to maintain several distinct websites with shared infrastructure.
|
6
|
+
|
7
|
+
### Static Files Philosophy
|
8
|
+
|
9
|
+
Scriptorium generates static HTML, CSS, and JavaScript files. This approach offers several key benefits:
|
10
|
+
|
11
|
+
- **Performance**: Static files load quickly and can be served efficiently by any web server
|
12
|
+
- **Reliability**: No server-side processing means fewer points of failure
|
13
|
+
- **Security**: No dynamic code execution reduces attack vectors
|
14
|
+
- **Scalability**: Static files can be served by CDNs and cached effectively
|
15
|
+
- **Simplicity**: No database setup, server configuration, or runtime dependencies
|
16
|
+
|
17
|
+
When you publish content with Scriptorium, it generates a complete set of static files that can be deployed to any web hosting service - from simple file hosting to sophisticated CDN networks.
|
18
|
+
|
19
|
+
### Multi-View Architecture
|
20
|
+
|
21
|
+
Scriptorium's most distinctive feature is its **multi-view architecture**. Instead of managing separate installations for different blogs or websites, you can create multiple "views" within a single Scriptorium repository.
|
22
|
+
|
23
|
+
**What is a view?**
|
24
|
+
A view represents a complete, independent website or blog. Each view has its own:
|
25
|
+
- Configuration settings
|
26
|
+
- Theme and styling
|
27
|
+
- Content (posts, pages, widgets)
|
28
|
+
- Deployment settings
|
29
|
+
- URL structure
|
30
|
+
|
31
|
+
**Why use views?**
|
32
|
+
- **Efficiency**: Manage multiple sites from one installation
|
33
|
+
- **Consistency**: Share themes, templates, and infrastructure
|
34
|
+
- **Flexibility**: Each view can have completely different content and styling
|
35
|
+
- **Maintenance**: Update core functionality across all views at once
|
36
|
+
|
37
|
+
For example, you might have:
|
38
|
+
- A personal blog view
|
39
|
+
- A professional portfolio view
|
40
|
+
- A project documentation view
|
41
|
+
- A photo gallery view
|
42
|
+
|
43
|
+
All managed from the same Scriptorium installation, with shared themes and infrastructure but completely independent content.
|
44
|
+
|
45
|
+
### Repository Structure
|
46
|
+
|
47
|
+
A Scriptorium repository is a directory that contains everything needed to manage your views and generate your websites. The repository structure follows a logical organization:
|
48
|
+
|
49
|
+
```
|
50
|
+
scriptorium/
|
51
|
+
├── config/ # Global configuration files
|
52
|
+
├── views/ # Individual view directories
|
53
|
+
│ ├── personal/ # Personal blog view
|
54
|
+
│ ├── portfolio/ # Professional portfolio view
|
55
|
+
│ └── docs/ # Documentation view
|
56
|
+
├── drafts/ # Draft posts (global)
|
57
|
+
├── posts/ # Generated posts (global)
|
58
|
+
├── assets/ # Shared images and files
|
59
|
+
├── themes/ # Theme templates
|
60
|
+
└── scripts/ # Utility scripts
|
61
|
+
```
|
62
|
+
|
63
|
+
**Key Repository Concepts:**
|
64
|
+
- **Global vs View-specific**: Some content (like posts) is global and can be shared across views, while other content (like view configuration) is specific to each view
|
65
|
+
- **Separation of concerns**: Content, presentation, and configuration are clearly separated
|
66
|
+
- **Version control friendly**: The entire repository can be managed with Git or similar tools
|
67
|
+
|
68
|
+
### Deployment Overview
|
69
|
+
|
70
|
+
Scriptorium generates static files that can be deployed to virtually any web hosting service. The deployment process is straightforward:
|
71
|
+
|
72
|
+
1. **Generate content**: Scriptorium processes your content and generates static HTML files
|
73
|
+
2. **Upload files**: Transfer the generated files to your web server
|
74
|
+
3. **Serve content**: Your web server serves the static files to visitors
|
75
|
+
|
76
|
+
**Deployment options include:**
|
77
|
+
- Traditional web hosting (shared hosting, VPS, dedicated servers)
|
78
|
+
- Static hosting services (Netlify, Vercel, GitHub Pages)
|
79
|
+
- Content delivery networks (CDN) for global performance
|
80
|
+
- Cloud storage with web serving capabilities
|
81
|
+
|
82
|
+
The static nature of Scriptorium's output means you have maximum flexibility in choosing where and how to host your content. [Detailed deployment instructions are covered in Section 9.]
|
83
|
+
|
84
|
+
## What is LiveText?
|
85
|
+
|
86
|
+
LiveText is a templating and content processing system that powers Scriptorium's content generation. It provides a simple, powerful way to create dynamic content while maintaining the benefits of static file generation.
|
87
|
+
|
88
|
+
### Why LiveText?
|
89
|
+
|
90
|
+
Scriptorium could have used any number of templating systems (Markdown, Liquid, ERB, etc.), but LiveText was chosen for several key reasons:
|
91
|
+
|
92
|
+
- **Simplicity**: LiveText syntax is straightforward and easy to learn
|
93
|
+
- **Power**: Despite its simplicity, LiveText is capable of complex content processing
|
94
|
+
- **Integration**: LiveText integrates seamlessly with Ruby, allowing for custom functions and logic
|
95
|
+
- **Flexibility**: LiveText can handle both simple content formatting and complex dynamic generation
|
96
|
+
- **Consistency**: LiveText provides a unified approach to content, templates, and configuration
|
97
|
+
|
98
|
+
LiveText bridges the gap between static content and dynamic generation, allowing you to create sophisticated websites while maintaining the performance and reliability benefits of static files.
|
99
|
+
|
100
|
+
### LiveText Syntax in Brief
|
101
|
+
|
102
|
+
LiveText uses a simple but powerful syntax based on "dot commands" and inline formatting. Here's a quick overview:
|
103
|
+
|
104
|
+
**Inline formatting:**
|
105
|
+
```
|
106
|
+
This is *bold and this is _italic text.
|
107
|
+
This is *[multiple words boldfaced].
|
108
|
+
```
|
109
|
+
|
110
|
+
**Dot commands with parameters:**
|
111
|
+
```
|
112
|
+
.title My Blog Post
|
113
|
+
.date 2025-07-29
|
114
|
+
.tags ruby, programming, blog
|
115
|
+
|
116
|
+
.link https://example.com Visit Example
|
117
|
+
.image /images/photo.jpg My Photo
|
118
|
+
```
|
119
|
+
|
120
|
+
**Dot commands with body content:**
|
121
|
+
```
|
122
|
+
.quote
|
123
|
+
This is an inset quote.
|
124
|
+
Wherever you go,
|
125
|
+
there you are.
|
126
|
+
.end
|
127
|
+
```
|
128
|
+
|
129
|
+
**Variables and functions:**
|
130
|
+
```
|
131
|
+
This file is called $File (predefined var).
|
132
|
+
The current time is: $$time
|
133
|
+
This post has $$word_count words.
|
134
|
+
```
|
135
|
+
|
136
|
+
LiveText's syntax is designed to be readable and writable, making it easy to create content without getting bogged down in complex templating syntax. [Complete LiveText documentation is provided in Section 3.]
|
137
|
+
|
@@ -0,0 +1,515 @@
|
|
1
|
+
# 10. Troubleshooting
|
2
|
+
|
3
|
+
Even with the best setup, you may encounter issues while using Scriptorium. This section covers common problems and their solutions, helping you quickly resolve issues and get back to creating content.
|
4
|
+
|
5
|
+
## Common Issues
|
6
|
+
|
7
|
+
### Site generation problems
|
8
|
+
|
9
|
+
#### Site won't generate
|
10
|
+
|
11
|
+
**Symptoms**: Running `scriptorium generate` fails or produces errors.
|
12
|
+
|
13
|
+
**Possible causes and solutions**:
|
14
|
+
|
15
|
+
1. **Missing dependencies**:
|
16
|
+
```bash
|
17
|
+
# Check if Ruby and required gems are installed
|
18
|
+
ruby --version
|
19
|
+
gem list
|
20
|
+
|
21
|
+
# Reinstall Scriptorium if needed
|
22
|
+
gem uninstall scriptorium
|
23
|
+
gem install scriptorium
|
24
|
+
```
|
25
|
+
|
26
|
+
2. **Corrupted repository**:
|
27
|
+
```bash
|
28
|
+
# Check repository integrity
|
29
|
+
scriptorium status
|
30
|
+
|
31
|
+
# If corrupted, restore from backup or recreate
|
32
|
+
cp -r .scriptorium .scriptorium.backup
|
33
|
+
scriptorium init
|
34
|
+
```
|
35
|
+
|
36
|
+
3. **Permission issues**:
|
37
|
+
```bash
|
38
|
+
# Check file permissions
|
39
|
+
ls -la
|
40
|
+
|
41
|
+
# Fix permissions if needed
|
42
|
+
chmod 755 .
|
43
|
+
chmod 644 *.txt *.md *.lt3
|
44
|
+
```
|
45
|
+
|
46
|
+
#### Posts not appearing
|
47
|
+
|
48
|
+
**Symptoms**: Posts exist but don't show up on the site.
|
49
|
+
|
50
|
+
**Solutions**:
|
51
|
+
|
52
|
+
1. **Check post status**:
|
53
|
+
```bash
|
54
|
+
scriptorium list posts
|
55
|
+
```
|
56
|
+
|
57
|
+
2. **Verify post is linked to current view**:
|
58
|
+
```bash
|
59
|
+
scriptorium post 001
|
60
|
+
# Check the "views" field
|
61
|
+
```
|
62
|
+
|
63
|
+
3. **Link post to view if needed**:
|
64
|
+
```bash
|
65
|
+
scriptorium link 001
|
66
|
+
```
|
67
|
+
|
68
|
+
4. **Regenerate the site**:
|
69
|
+
```bash
|
70
|
+
scriptorium generate
|
71
|
+
```
|
72
|
+
|
73
|
+
#### Images not displaying
|
74
|
+
|
75
|
+
**Symptoms**: Images appear broken or don't load.
|
76
|
+
|
77
|
+
**Solutions**:
|
78
|
+
|
79
|
+
1. **Check image paths**:
|
80
|
+
```bash
|
81
|
+
# Verify image exists
|
82
|
+
ls -la assets/images/
|
83
|
+
|
84
|
+
# Check path in post
|
85
|
+
scriptorium edit posts/001.lt3
|
86
|
+
```
|
87
|
+
|
88
|
+
2. **Correct image references**:
|
89
|
+
```
|
90
|
+
# Use relative paths from the post
|
91
|
+

|
92
|
+
|
93
|
+
# Or absolute paths from site root
|
94
|
+

|
95
|
+
```
|
96
|
+
|
97
|
+
3. **Ensure images are in the correct directory**:
|
98
|
+
```bash
|
99
|
+
# Move images to assets directory
|
100
|
+
mv my-image.jpg assets/images/
|
101
|
+
```
|
102
|
+
|
103
|
+
### Widget issues
|
104
|
+
|
105
|
+
#### Widget not appearing
|
106
|
+
|
107
|
+
**Symptoms**: Widget is configured but doesn't show on the site.
|
108
|
+
|
109
|
+
**Solutions**:
|
110
|
+
|
111
|
+
1. **Check widget configuration**:
|
112
|
+
```bash
|
113
|
+
scriptorium edit widgets/links/list.txt
|
114
|
+
# Verify the file exists and has content
|
115
|
+
```
|
116
|
+
|
117
|
+
2. **Generate the widget**:
|
118
|
+
```bash
|
119
|
+
scriptorium generate widget links
|
120
|
+
```
|
121
|
+
|
122
|
+
3. **Check layout configuration**:
|
123
|
+
```bash
|
124
|
+
scriptorium edit config/layout.txt
|
125
|
+
# Ensure sidebar containers are defined
|
126
|
+
|
127
|
+
scriptorium edit config/left.txt
|
128
|
+
# Ensure widget is referenced
|
129
|
+
```
|
130
|
+
|
131
|
+
4. **Regenerate the entire site**:
|
132
|
+
```bash
|
133
|
+
scriptorium generate
|
134
|
+
```
|
135
|
+
|
136
|
+
#### Widget content not updating
|
137
|
+
|
138
|
+
**Symptoms**: Changes to widget configuration don't appear on the site.
|
139
|
+
|
140
|
+
**Solutions**:
|
141
|
+
|
142
|
+
1. **Regenerate the specific widget**:
|
143
|
+
```bash
|
144
|
+
scriptorium generate widget widget-name
|
145
|
+
```
|
146
|
+
|
147
|
+
2. **Clear any caching**:
|
148
|
+
```bash
|
149
|
+
# Remove generated files
|
150
|
+
rm -rf output/
|
151
|
+
scriptorium generate
|
152
|
+
```
|
153
|
+
|
154
|
+
### Theme and styling issues
|
155
|
+
|
156
|
+
#### Theme not applying
|
157
|
+
|
158
|
+
**Symptoms**: Site doesn't use the expected theme.
|
159
|
+
|
160
|
+
**Solutions**:
|
161
|
+
|
162
|
+
1. **Check theme configuration**:
|
163
|
+
```bash
|
164
|
+
scriptorium edit config.txt
|
165
|
+
# Verify theme: theme-name is set correctly
|
166
|
+
```
|
167
|
+
|
168
|
+
2. **Verify theme exists**:
|
169
|
+
```bash
|
170
|
+
ls -la themes/
|
171
|
+
# Ensure the theme directory exists
|
172
|
+
```
|
173
|
+
|
174
|
+
3. **Apply theme explicitly**:
|
175
|
+
```bash
|
176
|
+
scriptorium theme theme-name
|
177
|
+
```
|
178
|
+
|
179
|
+
#### CSS not loading
|
180
|
+
|
181
|
+
**Symptoms**: Site appears unstyled or with broken styling.
|
182
|
+
|
183
|
+
**Solutions**:
|
184
|
+
|
185
|
+
1. **Check CSS file paths**:
|
186
|
+
```bash
|
187
|
+
ls -la themes/standard/layout/gen/
|
188
|
+
# Verify CSS files exist
|
189
|
+
```
|
190
|
+
|
191
|
+
2. **Regenerate theme**:
|
192
|
+
```bash
|
193
|
+
scriptorium generate
|
194
|
+
# This should regenerate CSS files
|
195
|
+
```
|
196
|
+
|
197
|
+
3. **Check browser cache**:
|
198
|
+
- Hard refresh (Ctrl+F5 or Cmd+Shift+R)
|
199
|
+
- Clear browser cache
|
200
|
+
- Try incognito/private browsing mode
|
201
|
+
|
202
|
+
## Dependency Management
|
203
|
+
|
204
|
+
### Ruby version issues
|
205
|
+
|
206
|
+
**Symptoms**: Scriptorium fails to run or has compatibility issues.
|
207
|
+
|
208
|
+
**Solutions**:
|
209
|
+
|
210
|
+
1. **Check Ruby version**:
|
211
|
+
```bash
|
212
|
+
ruby --version
|
213
|
+
# Scriptorium requires Ruby 2.7 or higher
|
214
|
+
```
|
215
|
+
|
216
|
+
2. **Update Ruby if needed**:
|
217
|
+
```bash
|
218
|
+
# Using rbenv
|
219
|
+
rbenv install 3.2.0
|
220
|
+
rbenv global 3.2.0
|
221
|
+
|
222
|
+
# Using rvm
|
223
|
+
rvm install 3.2.0
|
224
|
+
rvm use 3.2.0 --default
|
225
|
+
```
|
226
|
+
|
227
|
+
3. **Reinstall gems**:
|
228
|
+
```bash
|
229
|
+
gem update
|
230
|
+
gem install scriptorium
|
231
|
+
```
|
232
|
+
|
233
|
+
### Gem conflicts
|
234
|
+
|
235
|
+
**Symptoms**: Scriptorium conflicts with other Ruby gems.
|
236
|
+
|
237
|
+
**Solutions**:
|
238
|
+
|
239
|
+
1. **Use bundler**:
|
240
|
+
```bash
|
241
|
+
# Create Gemfile
|
242
|
+
echo 'gem "scriptorium"' > Gemfile
|
243
|
+
|
244
|
+
# Install with bundler
|
245
|
+
bundle install
|
246
|
+
bundle exec scriptorium
|
247
|
+
```
|
248
|
+
|
249
|
+
2. **Use gem isolation**:
|
250
|
+
```bash
|
251
|
+
# Install in user directory
|
252
|
+
gem install --user-install scriptorium
|
253
|
+
```
|
254
|
+
|
255
|
+
3. **Check gem environment**:
|
256
|
+
```bash
|
257
|
+
gem env
|
258
|
+
# Verify gem paths and versions
|
259
|
+
```
|
260
|
+
|
261
|
+
### System dependencies
|
262
|
+
|
263
|
+
**Symptoms**: Scriptorium fails due to missing system libraries.
|
264
|
+
|
265
|
+
**Solutions**:
|
266
|
+
|
267
|
+
1. **Install development tools**:
|
268
|
+
```bash
|
269
|
+
# Ubuntu/Debian
|
270
|
+
sudo apt install build-essential
|
271
|
+
|
272
|
+
# macOS
|
273
|
+
xcode-select --install
|
274
|
+
|
275
|
+
# CentOS/RHEL
|
276
|
+
sudo yum groupinstall "Development Tools"
|
277
|
+
```
|
278
|
+
|
279
|
+
2. **Install specific libraries**:
|
280
|
+
```bash
|
281
|
+
# Ubuntu/Debian
|
282
|
+
sudo apt install libssl-dev libreadline-dev zlib1g-dev
|
283
|
+
|
284
|
+
# CentOS/RHEL
|
285
|
+
sudo yum install openssl-devel readline-devel zlib-devel
|
286
|
+
```
|
287
|
+
|
288
|
+
## Error Messages
|
289
|
+
|
290
|
+
### Common error messages and solutions
|
291
|
+
|
292
|
+
#### "Cannot read file: file not found"
|
293
|
+
|
294
|
+
**Cause**: Scriptorium can't find a required file.
|
295
|
+
|
296
|
+
**Solution**:
|
297
|
+
```bash
|
298
|
+
# Check if file exists
|
299
|
+
ls -la path/to/file
|
300
|
+
|
301
|
+
# Create missing file if needed
|
302
|
+
touch path/to/file
|
303
|
+
|
304
|
+
# Check file permissions
|
305
|
+
chmod 644 path/to/file
|
306
|
+
```
|
307
|
+
|
308
|
+
#### "Cannot build widget: name invalid"
|
309
|
+
|
310
|
+
**Cause**: Widget name contains invalid characters.
|
311
|
+
|
312
|
+
**Solution**:
|
313
|
+
```bash
|
314
|
+
# Use only lowercase letters, numbers, and hyphens
|
315
|
+
# Good: my-widget, links, pages
|
316
|
+
# Bad: My_Widget, links!, pages@
|
317
|
+
```
|
318
|
+
|
319
|
+
#### "Layout has unknown tag"
|
320
|
+
|
321
|
+
**Cause**: Layout file contains unrecognized container names.
|
322
|
+
|
323
|
+
**Solution**:
|
324
|
+
```bash
|
325
|
+
# Check layout file
|
326
|
+
scriptorium edit config/layout.txt
|
327
|
+
|
328
|
+
# Valid containers: header, main, left, right, footer
|
329
|
+
# Remove or correct invalid container names
|
330
|
+
```
|
331
|
+
|
332
|
+
#### "Theme doesn't exist"
|
333
|
+
|
334
|
+
**Cause**: Referenced theme is not found.
|
335
|
+
|
336
|
+
**Solution**:
|
337
|
+
```bash
|
338
|
+
# List available themes
|
339
|
+
ls -la themes/
|
340
|
+
|
341
|
+
# Check theme configuration
|
342
|
+
scriptorium edit config.txt
|
343
|
+
|
344
|
+
# Use existing theme or create new one
|
345
|
+
scriptorium theme standard
|
346
|
+
```
|
347
|
+
|
348
|
+
#### "Post not found"
|
349
|
+
|
350
|
+
**Cause**: Referenced post ID doesn't exist.
|
351
|
+
|
352
|
+
**Solution**:
|
353
|
+
```bash
|
354
|
+
# List all posts
|
355
|
+
scriptorium list posts
|
356
|
+
|
357
|
+
# Check post ID format
|
358
|
+
# Posts should be numbered: 001, 002, etc.
|
359
|
+
|
360
|
+
# Create post if needed
|
361
|
+
scriptorium new post "Post Title"
|
362
|
+
```
|
363
|
+
|
364
|
+
### Debugging techniques
|
365
|
+
|
366
|
+
#### Enable verbose output
|
367
|
+
|
368
|
+
```bash
|
369
|
+
# Run commands with verbose output
|
370
|
+
scriptorium generate --verbose
|
371
|
+
|
372
|
+
# Check for detailed error messages
|
373
|
+
scriptorium status --verbose
|
374
|
+
```
|
375
|
+
|
376
|
+
#### Check log files
|
377
|
+
|
378
|
+
```bash
|
379
|
+
# Look for error logs
|
380
|
+
find . -name "*.log" -exec cat {} \;
|
381
|
+
|
382
|
+
# Check system logs
|
383
|
+
tail -f /var/log/syslog # Linux
|
384
|
+
tail -f /var/log/system.log # macOS
|
385
|
+
```
|
386
|
+
|
387
|
+
#### Test individual components
|
388
|
+
|
389
|
+
```bash
|
390
|
+
# Test post generation
|
391
|
+
scriptorium generate post 001
|
392
|
+
|
393
|
+
# Test widget generation
|
394
|
+
scriptorium generate widget links
|
395
|
+
|
396
|
+
# Test theme application
|
397
|
+
scriptorium theme standard
|
398
|
+
```
|
399
|
+
|
400
|
+
## Getting Help
|
401
|
+
|
402
|
+
### Self-help resources
|
403
|
+
|
404
|
+
1. **Check the documentation**:
|
405
|
+
- Review relevant sections of this user guide
|
406
|
+
- Check the README file in your Scriptorium installation
|
407
|
+
- Look for examples in the test directory
|
408
|
+
|
409
|
+
2. **Use built-in help**:
|
410
|
+
```bash
|
411
|
+
scriptorium --help
|
412
|
+
scriptorium help command-name
|
413
|
+
```
|
414
|
+
|
415
|
+
3. **Check the source code**:
|
416
|
+
```bash
|
417
|
+
# Find Scriptorium installation
|
418
|
+
gem which scriptorium
|
419
|
+
|
420
|
+
# Explore the source
|
421
|
+
ls -la $(gem which scriptorium | sed 's/lib\/scriptorium.rb//')
|
422
|
+
```
|
423
|
+
|
424
|
+
### Community resources
|
425
|
+
|
426
|
+
1. **GitHub repository**:
|
427
|
+
- Check issues for similar problems
|
428
|
+
- Review recent commits for fixes
|
429
|
+
- Submit new issues for bugs
|
430
|
+
|
431
|
+
2. **Documentation**:
|
432
|
+
- Check the project wiki
|
433
|
+
- Review example configurations
|
434
|
+
- Look for community-contributed guides
|
435
|
+
|
436
|
+
3. **Forums and discussions**:
|
437
|
+
- Search for Scriptorium discussions
|
438
|
+
- Ask questions in relevant communities
|
439
|
+
- Share solutions with others
|
440
|
+
|
441
|
+
### Reporting bugs
|
442
|
+
|
443
|
+
When reporting bugs, include:
|
444
|
+
|
445
|
+
1. **System information**:
|
446
|
+
```bash
|
447
|
+
ruby --version
|
448
|
+
gem list scriptorium
|
449
|
+
uname -a
|
450
|
+
```
|
451
|
+
|
452
|
+
2. **Steps to reproduce**:
|
453
|
+
- Exact commands run
|
454
|
+
- Expected vs. actual behavior
|
455
|
+
- Any error messages
|
456
|
+
|
457
|
+
3. **Configuration details**:
|
458
|
+
- Relevant configuration files
|
459
|
+
- Post content (if relevant)
|
460
|
+
- Theme and widget setup
|
461
|
+
|
462
|
+
4. **Error logs**:
|
463
|
+
- Full error messages
|
464
|
+
- Stack traces
|
465
|
+
- Debug output
|
466
|
+
|
467
|
+
### Getting support
|
468
|
+
|
469
|
+
1. **Before asking for help**:
|
470
|
+
- Try the solutions in this section
|
471
|
+
- Search for similar issues
|
472
|
+
- Check if the problem is user error
|
473
|
+
|
474
|
+
2. **When asking for help**:
|
475
|
+
- Be specific about the problem
|
476
|
+
- Include relevant error messages
|
477
|
+
- Provide system and configuration details
|
478
|
+
- Explain what you've already tried
|
479
|
+
|
480
|
+
3. **Follow up**:
|
481
|
+
- Let people know if their suggestions worked
|
482
|
+
- Share solutions that worked for you
|
483
|
+
- Help others with similar problems
|
484
|
+
|
485
|
+
### Prevention tips
|
486
|
+
|
487
|
+
1. **Regular backups**:
|
488
|
+
```bash
|
489
|
+
# Backup your Scriptorium repository
|
490
|
+
tar -czf scriptorium-backup-$(date +%Y%m%d).tar.gz .
|
491
|
+
```
|
492
|
+
|
493
|
+
2. **Version control**:
|
494
|
+
```bash
|
495
|
+
# Use git for version control
|
496
|
+
git init
|
497
|
+
git add .
|
498
|
+
git commit -m "Initial commit"
|
499
|
+
```
|
500
|
+
|
501
|
+
3. **Test changes**:
|
502
|
+
```bash
|
503
|
+
# Test changes before applying
|
504
|
+
scriptorium generate --dry-run
|
505
|
+
|
506
|
+
# Keep a test environment
|
507
|
+
cp -r . test-environment
|
508
|
+
```
|
509
|
+
|
510
|
+
4. **Document your setup**:
|
511
|
+
- Keep notes on your configuration
|
512
|
+
- Document customizations
|
513
|
+
- Record solutions to problems
|
514
|
+
|
515
|
+
By following these troubleshooting steps and best practices, you can quickly resolve most issues and maintain a stable Scriptorium installation.
|