{"id":16068102,"url":"https://github.com/ged/thingfish-datastore-filesystem","last_synced_at":"2025-10-09T13:13:27.014Z","repository":{"id":65988036,"uuid":"72801117","full_name":"ged/thingfish-datastore-filesystem","owner":"ged","description":"Git mirror","archived":false,"fork":false,"pushed_at":"2020-04-08T01:14:44.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T10:14:16.531Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://bitbucket.org/ged/thingfish-datastore-filesystem","language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ged.png","metadata":{"files":{"readme":"README.rdoc","changelog":"History.rdoc","contributing":null,"funding":null,"license":"LICENSE.rdoc","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-04T01:03:41.000Z","updated_at":"2021-11-28T23:35:28.000Z","dependencies_parsed_at":"2023-05-31T19:15:46.068Z","dependency_job_id":null,"html_url":"https://github.com/ged/thingfish-datastore-filesystem","commit_stats":{"total_commits":37,"total_committers":3,"mean_commits":"12.333333333333334","dds":"0.21621621621621623","last_synced_commit":"f4da4d85945e099cb687696f0e3aa899b951fc7e"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ged/thingfish-datastore-filesystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ged%2Fthingfish-datastore-filesystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ged%2Fthingfish-datastore-filesystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ged%2Fthingfish-datastore-filesystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ged%2Fthingfish-datastore-filesystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ged","download_url":"https://codeload.github.com/ged/thingfish-datastore-filesystem/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ged%2Fthingfish-datastore-filesystem/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001543,"owners_count":26083102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-09T06:08:33.024Z","updated_at":"2025-10-09T13:13:26.959Z","avatar_url":"https://github.com/ged.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Thingfish Filesystem Datastore\n\nhome:: https://hg.sr.ht/~ged/Thingfish-Datastore-Filesystem\ncode:: https://hg.sr.ht/~ged/Thingfish-Datastore-Filesystem/browse\ngithub:: https://github.com/ged/Thingfish-Datastore-Filesystem\ndocs:: http://deveiate.org/code/Thingfish-Datastore-Filesystem\n\n\n== Description\n\nThis is a data storage plugin for the Thingfish digital asset manager.\nIt provides persistent storage for uploaded data to a simple filesystem\npath.\n\n\n== Installation\n\n    $ gem install thingfish-datastore-filesystem\n\n\n== Basic Usage\n\nBy default, data will be stored in a 'thingfish' directory, underneath\nyour system's tmpdir.  (For most systems, this will be /tmp/thingfish.)\nThis directory will need to exist before starting the Thingfish handler.\n\nAs with Thingfish itself, this plugin uses\nConfigurability[https://rubygems.org/gems/configurability] to modify\ndefault behaviors.\n\nHere's an example configuration file that enables this plugin and\nmodifies the default storage path:\n\n  ---\n  thingfish:\n    datastore: filesystem\n    filesystem_datastore:\n      root_path: /net/storage/thingfish-data\n\n\n== Advanced Usage\n\nThis plugin can utilize various advanced features of the Mongrel2 daemon\nthat can offload large data transfers to the Mongrel2 daemon directly.\nThis frees the Thingfish handler(s) up for servicing new requests\nquickly, and dramatically improves performance for concurrent data\ntransfers and large files.\n\n=== Assumptions\n\nBecause of Mongrel2's flexible architecture, you could equally run\neverything under a single machine, or scale Thingfish out as a farm,\nspanning hundreds of handlers across individual nodes, all with the same\nconfiguration.  In any case, Your Thingfish handlers need access to the\nsame physical storage device(s) that the Mongrel2 daemon does.\n\nHow you accomplish this is entirely up to you, though NFS is a likely\nchoice.  There are two directories that the Mongrel2 server and the\nThingfish handlers will need access to -- one for downloads (this\nplugin's 'root_path' directory), and one for uploads (the Mongrel2 async\nspool directory.)\n\n\n=== Downloads\n\nTo enable this functionality for downloads, you'll need to add the\n'sendfile' filter in your Mongrel2 server configuration.  The path to\nthis library will vary, depending on where Mongrel2 was installed on\nyour system -- but it should look like something that resembles:\n\n\txrequest '/usr/local/lib/mongrel2/filters/sendfile.so'\n\nThat filter is automatically built alongside Mongrel2, it just needs to\nbe switched on.  Ensure the 'root_path' is accessible from the Thingfish\nhandler(s) and the Mongrel2 daemon.\n\n\n=== Uploads\n\nUploads also require altering Mongrel2 server settings:\n\n\tsetting 'limits.content_length', 65536\n\nThis switches on async uploads, for any upload larger than 64k.\nAnything under 64k is kept in RAM, and handled internally by the\nThingfish handler.  Adjust to taste.\n\n\tsetting 'upload.temp_store', '/network/storage/mongrel2.upload.XXXXXXX'\n\nFor files larger than 'limits.content_length' size, asynchronously\nspool the upload to this location.  When the file upload has completed,\nMongrel2 notifies Thingfish, and the spooled upload is properly stored.\nThis path must be accessible from the Thingfish handler(s) and the\nMongrel2 daemon.\n\n\tsetting 'upload.temp_store_mode', '0600'\n\nWhile this is not required, it is recommended to spool files so they\nare readable only to the Mongrel2 process.  It is your responsibility\nto ensure the user account running the Thingfish handler also has\nread/write access to these files.\n\n\n== Authors\n\n- Michael Granger \u003cged@FaerieMUD.org\u003e\n- Mahlon E. Smith \u003cmahlon@martini.nu\u003e\n\n\n== License\n\nCopyright (c) 2014-2020, Michael Granger and Mahlon E. Smith\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the author/s, nor the names of the project's\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fged%2Fthingfish-datastore-filesystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fged%2Fthingfish-datastore-filesystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fged%2Fthingfish-datastore-filesystem/lists"}