Rails应用:如何创建并存储本地独立的可更新配置值?
适合Rails本地单值持久存储的方案
以下几个方案都能满足你永久本地存储、可更新、Ruby代码中任意调用的需求,且无需依赖数据库:
1. 普通文本文件存储(最轻量化)
直接用纯文本文件保存数值,读写逻辑极简,无额外依赖:
# 定义存储文件路径,建议放在tmp目录下,避免被版本控制追踪 COUNT_FILE = Rails.root.join('tmp', 'import_count.txt') # 获取当前导入计数,不存在则返回0 def get_import_count File.exist?(COUNT_FILE) ? File.read(COUNT_FILE).to_i : 0 end # 更新计数(支持设置任意数值) def update_import_count(new_count) # 加文件锁避免并发读写冲突 File.open(COUNT_FILE, 'w') do |f| f.flock(File::LOCK_EX) f.write(new_count.to_s) end end # 首次运行自动初始化计数为0 update_import_count(0) unless File.exist?(COUNT_FILE)
2. YAML文件存储(可扩展)
如果未来可能需要存储更多相关统计值,YAML格式更易维护,单值场景下同样易用:
COUNT_YAML = Rails.root.join('tmp', 'import_stats.yml') def get_import_count return 0 unless File.exist?(COUNT_YAML) YAML.load_file(COUNT_YAML)['import_count'] || 0 end def update_import_count(new_count) stats = File.exist?(COUNT_YAML) ? YAML.load_file(COUNT_YAML) : {} stats['import_count'] = new_count # 加锁处理并发 File.open(COUNT_YAML, 'w') do |f| f.flock(File::LOCK_EX) f.write(stats.to_yaml) end end
3. Rails本地缓存(最省心)
利用Rails自带的缓存系统,配置为本地文件存储后,无需自己处理文件细节:
首先在config/environments/production.rb(或对应环境配置文件)中设置缓存存储为本地文件:
config.cache_store = :file_store, Rails.root.join('tmp', 'cache')
然后在代码中直接调用缓存API:
# 获取计数,默认返回0 def get_import_count Rails.cache.read('import_count') || 0 end # 更新计数,设置永不过期 def update_import_count(new_count) Rails.cache.write('import_count', new_count, expires_in: nil) end
优点:Rails已封装好并发处理、文件管理逻辑,后续若需切换存储方式仅需修改配置。
内容的提问来源于stack exchange,提问作者nickeys
相关产品推荐
相关产品推荐

