使用Monica + Heroku 快速搭建一个免费的CRM系统

写在前面,部署使用的方法虽然很简单,但是有一下几个限制要说一下:

1、heroku 自身带有 550 个小时/月 的免费额度,在使用它的 附加功能时 需要绑定信用卡(即使是免费的附加功能),因为Monica 使用了heroku的附加功能(mysql 免费版),所以不愿意使用信用卡或者没有信用卡的同学就直接劝退了。 

2、heroku在绑定了信用卡后,会增加450 个小时的免费额度,合起来就是 1000个 小时/月,免费版在半小时之内如果没有请求是会休眠的,直到有新的请求进来才会经过短暂延迟‘醒来’,对时间额度和请求速度有要求的同学也劝退了。

3、heroku 访问不了应该就是被 ban 了,访问不了又没有别的办法的同学也同样劝退了。

 

接下来进入正题,

没有heroku账号的同学可以去注册一个,很快就好,没什么好说的。

然后是Monica github地址 

我们可以在自己的服务器上无限制的使用Monica,Monica也可以在很多平台上使用,我个人觉得最简便的方法就是把应用托管到heroku上,看 官方教程

在准备好 heroku 账号之后,在上面页面点击 ‘Deploy to Heroku’后进入heroku 应用配置页面,

接下来,填好比较重要的几项内容:

App name : 应用名称  影响后面访问的链接

APP_EMAIL_NEW_USERS_NOTIFICATION  : 当应用有新的用户提醒的发送邮件到这个邮箱

APP_KEY :随机的32位字符  linux可以使用  `pwgen -s 32 1` 的命令生成

MAIL_FROM_ADDRESS:邮箱地址

MAIL_FROM_NAME:邮件的名称

 

然后点击 ‘Deploy app’ 开始部署(为了能顺利部署,建议先去Account setting -> Billing -> Billing Information 绑定好信用卡,不然部署过程中它还是会让你去绑定的。)

 

待部署成功后,点击 ‘Manage app’ 按钮,进入应用管理页,去设置一个应用需要的定时任务,点击

可以设置每10分钟或者 每小时执行一次 

 

设置好之后,应用就可以用了,在 应用管理页 -> Setting -> Domains and certificates 能够看到部署的地址,点击进去注册使用即可;

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个antd select级联选择器的示例代码: ``` import React, { useState } from 'react'; import { Select } from 'antd'; const { Option } = Select; const CascaderSelect = () => { const [cities, setCities] = useState([]); const [regions, setRegions] = useState([]); const handleCountryChange = (value) => { setCities([]); setRegions([]); // 根据选中的国家,设置城市选项 if (value === 'china') { setCities(['beijing', 'shanghai', 'guangzhou']); } else if (value === 'usa') { setCities(['new york', 'washington', 'los angeles']); } else if (value === 'japan') { setCities(['tokyo', 'osaka', 'kyoto']); } } const handleCityChange = (value) => { setRegions([]); // 根据选中的城市,设置地区选项 if (value === 'beijing') { setRegions(['haidian', 'chaoyang', 'dongcheng']); } else if (value === 'shanghai') { setRegions(['pudong', 'minhang', 'xuhui']); } else if (value === 'guangzhou') { setRegions(['yuexiu', 'tianhe', 'haizhu']); } else if (value === 'new york') { setRegions(['manhattan', 'brooklyn', 'queens']); } else if (value === 'washington') { setRegions(['northwest', 'northeast', 'southeast']); } else if (value === 'los angeles') { setRegions(['hollywood', 'beverly hills', 'santa monica']); } else if (value === 'tokyo') { setRegions(['shibuya', 'shinjuku', 'harajuku']); } else if (value === 'osaka') { setRegions(['umeda', 'namba', 'tennoji']); } else if (value === 'kyoto') { setRegions(['higashiyama', 'nakagyo', 'shimogyo']); } } return ( <div> <Select style={{ width: 200 }} onChange={handleCountryChange}> <Option value="china">China</Option> <Option value="usa">USA</Option> <Option value="japan">Japan</Option> </Select> <Select style={{ width: 200, marginLeft: 10 }} onChange={handleCityChange}> {cities.map(city => ( <Option key={city} value={city}>{city}</Option> ))} </Select> <Select style={{ width: 200, marginLeft: 10 }}> {regions.map(region => ( <Option key={region} value={region}>{region}</Option> ))} </Select> </div> ); } export default CascaderSelect; ``` 这个示例代码中,我们使用了React的useState Hook来管理组件的状态,根据选中的国家和城市设置城市和地区选项。在Select组件中,我们使用了antd的Option组件来设置选项,onChange事件用来处理选项的变化,根据选中的值来动态更新组件的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值