如何在Cyclic.sh中修改文件系统权限以支持文件写入?
在Cyclic上解决NodeJS文件写入权限问题
Cyclic的应用运行环境是只读文件系统,你没法修改文件夹权限来实现写入——这是平台架构设计的限制,目的是保证应用部署的一致性和可扩展性。针对你的场景,给几个可行的替代方案:
方案1:用Cyclic内置的键值存储
Cyclic自带了专门的键值存储服务,适合存你这种JSON格式的结构化数据,不用额外配置。示例代码:
const { CyclicDb } = require('@cyclic.sh/dynamodb') const db = CyclicDb('你的应用名称') // 存储OG数据 async function saveOGInJson(url, data) { const ogCollection = db.collection('ogData') // 把URL转成合法的键名(替换特殊字符) const key = url.replace(/[^\w]/g, '_') await ogCollection.set(key, data) } // 获取OG数据 async function getOGInJson(url) { const ogCollection = db.collection('ogData') const key = url.replace(/[^\w]/g, '_') const result = await ogCollection.get(key) return result?.props }
方案2:用系统临时目录
如果只是临时存储数据(应用重启后数据会丢失),可以用NodeJS提供的临时目录,这里是可写的:
const fs = require('fs') const path = require('path') const os = require('os') async function saveOGInJson(url, data) { const tempDir = path.join(os.tmpdir(), 'ogData') // 先创建临时目录(不存在的话) if (!fs.existsSync(tempDir)) { fs.mkdirSync(tempDir, { recursive: true }) } const fileName = `${url.replace(/[^\w]/g, '_')}.json` const filePath = path.join(tempDir, fileName) fs.writeFileSync(filePath, JSON.stringify(data)) }
方案3:用外部对象存储服务
如果需要持久化的文件存储,可以用AWS S3、Cloudinary这类对象存储服务。以S3为例的简化代码:
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3') const s3 = new S3Client({ region: '你的AWS区域' }) async function saveOGInJson(url, data) { const params = { Bucket: '你的S3桶名称', Key: `ogData/${url.replace(/[^\w]/g, '_')}.json`, Body: JSON.stringify(data), ContentType: 'application/json' } await s3.send(new PutObjectCommand(params)) }
总结一下:别浪费时间尝试修改Cyclic的文件夹权限,平台本身就不允许写本地文件,选上面的方案替代就行。
内容的提问来源于stack exchange,提问作者Artaza Sameen
相关产品推荐
相关产品推荐

