`
不见得
  • 浏览: 12229 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Heroku 表面探索

阅读更多

    几个月前在heroku 注册了个账户, 那时候还是 beta测试, 也没当回事 , 2天前, heroku 给我发了个 Heroku Paid Services 的邮件, 也没怎么感兴趣, 我对任何 paid service 都不怎么感兴趣 , 不过 打开一看也是 有些我感兴趣的内容的

 

 

Heroku Paid Services 写道
Heroku has recently rolled out paid services, so you can add more performance and capabilities to your Heroku apps.
Now you can:
- add dynos for more performance
- scale your database
- add custom domains (free)
- add wildcard domains
- use SSL (free)
- make backups (free)
- use cron (free)

 

其实也没啥 , 就是那么几个free 的东西:

add custom domains (free ) , 这个可以把自己没用的域名扔上去

use SSL (free ) , 加了SSL 这样proxy 翻墙时候就不会被打扰了

use cron (free ), 有了cron , 能干的事情就多了(后来一看, free 的是 nightly cron )

 

 

    今天是端午,吃完粽子以后也没心情缅怀伟大的自由战士屈原了, 打开电脑去heroku一趟,还不错,小有收获.

就纪录下流水帐吧.

 

    去那的目的就是一个 , 把一个rails小程序从 dreamhost 上迁出去, 问啥叫小程序呢 ? 因为 heroku 给免费的应用 只有一个 blossom-1 , 呵呵, 只有5M 的database空间, 存储空间它也没说 , 估计也不会大吧

   (更正, 不是不大,是根本就没有, 需要连 s3 等)

 

    迁移的很顺利,  把code扔到 heroku的 git 上就成了 , 而且每次push的时候 , 你的应用会重新启动一下, 很方便 .

    但是 add custom domains 的时候, 或者其他 addon services 的时候 , 你的billing 信息必须验证 ,即使是免费的

    服务 , 这不就是为以后收钱做准备吗 , 结果扣了我信用卡里1美元 (我的一顿饭钱), 还不知道啥时候还给我 ,算了算

    了, 不跟他计较了 , 虽说我穷的铃儿响叮当了.

 

 

 

 

回到正题, 表面探索开始喽......

 

   heroku 的 构建 在此: architecture     , 我来啰唆一下: 从上到下:

 

   HTTP Reverse Proxy : Nginx 

                |

                V

  HTTP Cache :Varnish

                |

                V

Routing Mesh (Erlang 自己开发的)

                |

                V

   Dyno Grid(Ruby 就跑在这里面)

          |                              |

          V                             V

DB : PostgreSQL         Memory Cache : Memcached

 

 

从上面看 , 主要自己开发的就是 Routing Mesh 这一次, 其他都用 Open Source 的东西了

 

一切用数据说话, 我的  rails 小程序 跑在这么一个linux上:

uname -a 写道
Linux railgun64 2.6.18-xenU-ec2-v1.0 #2 SMP Mon Feb 18 14:28:43 UTC 2008 x86_64 GNU/Linux
 
一颗至强 E5345 /proc/cpuinfo 写道
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU E5345 @ 2.33GHz
stepping : 11
cpu MHz : 2327.500
cache size : 4096 KB
physical id : 1
siblings : 1
core id : 3
cpu cores : 1
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
bogomips : 4657.65
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:

 

 

内存 /proc.meminfo 写道
MemTotal: 7340172 kB
MemFree: 3762200 kB
Buffers: 130992 kB
Cached: 370448 kB
SwapCached: 0 kB
Active: 2828944 kB
Inactive: 363188 kB

 

ruby 版本 写道
ruby 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux]

 

thin 版本 写道
thin 1.0.1 codename ?

 

当前系统进程(部分, 后边的thin 省略) 写道
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 6124 688 ? Ss May27 0:00 init [4]
root 2 0.0 0.0 0 0 ? S May27 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S May27 0:00 [watchdog/0]
root 5 0.0 0.0 0 0 ? S< May27 0:00 [events/0]
root 6 0.0 0.0 0 0 ? S< May27 0:00 [khelper]
root 7 0.0 0.0 0 0 ? S< May27 0:00 [kthread]
root 9 0.0 0.0 0 0 ? S< May27 0:00 [xenwatch]
root 10 0.0 0.0 0 0 ? S< May27 0:00 [xenbus]
root 18 0.0 0.0 0 0 ? S< May27 0:00 [migration/1]
root 19 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/1]
root 20 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/1]
root 21 0.0 0.0 0 0 ? S< May27 0:00 [events/1]
root 22 0.0 0.0 0 0 ? S< May27 0:00 [migration/2]
root 23 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/2]
root 24 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/2]
root 25 0.0 0.0 0 0 ? S< May27 0:00 [events/2]
root 26 0.0 0.0 0 0 ? S< May27 0:00 [migration/3]
root 27 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/3]
root 28 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/3]
root 29 0.0 0.0 0 0 ? S< May27 0:00 [events/3]
root 30 0.0 0.0 0 0 ? S< May27 0:00 [migration/4]
root 31 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/4]
root 32 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/4]
root 33 0.0 0.0 0 0 ? S< May27 0:00 [events/4]
root 34 0.0 0.0 0 0 ? S< May27 0:00 [migration/5]
root 35 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/5]
root 36 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/5]
root 37 0.0 0.0 0 0 ? S< May27 0:00 [events/5]
root 38 0.0 0.0 0 0 ? S< May27 0:00 [migration/6]
root 39 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/6]
root 40 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/6]
root 41 0.0 0.0 0 0 ? S< May27 0:00 [events/6]
root 42 0.0 0.0 0 0 ? S< May27 0:00 [migration/7]
root 43 0.0 0.0 0 0 ? SN May27 0:00 [ksoftirqd/7]
root 44 0.0 0.0 0 0 ? S< May27 0:00 [watchdog/7]
root 45 0.0 0.0 0 0 ? S< May27 0:00 [events/7]
root 54 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/0]
root 55 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/1]
root 56 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/2]
root 57 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/3]
root 58 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/4]
root 59 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/5]
root 60 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/6]
root 61 0.0 0.0 0 0 ? S< May27 0:00 [kblockd/7]
root 63 0.0 0.0 0 0 ? S< May27 0:00 [kseriod]
root 130 0.0 0.0 0 0 ? S May27 0:00 [pdflush]
root 131 0.0 0.0 0 0 ? S May27 0:00 [pdflush]
root 132 0.0 0.0 0 0 ? S< May27 0:00 [kswapd0]
root 133 0.0 0.0 0 0 ? S< May27 0:00 [aio/0]
root 134 0.0 0.0 0 0 ? S< May27 0:00 [aio/1]
root 135 0.0 0.0 0 0 ? S< May27 0:00 [aio/2]
root 136 0.0 0.0 0 0 ? S< May27 0:00 [aio/3]
root 137 0.0 0.0 0 0 ? S< May27 0:00 [aio/4]
root 138 0.0 0.0 0 0 ? S< May27 0:00 [aio/5]
root 139 0.0 0.0 0 0 ? S< May27 0:00 [aio/6]
root 140 0.0 0.0 0 0 ? S< May27 0:00 [aio/7]
root 752 0.0 0.0 0 0 ? S< May27 0:00 [kjournald]
root 839 0.0 0.0 10656 944 ? S
root 1763 0.0 0.0 0 0 ? S< May27 0:00 [kmirrord]
root 1819 0.0 0.0 0 0 ? S< May27 0:00 [kjournald]
root 1821 0.0 0.0 0 0 ? S< May27 0:00 [kjournald]
root 1898 0.0 0.0 4568 940 ? Ss May27 0:00 dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp3/dhclient.eth0.leases eth0
root 1988 0.0 0.0 10228 1644 ? Ss May27 0:00 /bin/sh /etc/init.d/rc 4
root 1997 0.0 0.0 3732 648 ? Ss May27 0:00 /sbin/syslogd
root 2003 0.0 0.0 2660 396 ? Ss May27 0:00 /sbin/klogd -x
root 2073 0.0 0.0 25840 1256 ? Ss May27 0:00 /usr/sbin/sshd
root 2106 0.0 0.0 8020 1972 ? S May27 0:00 /usr/bin/ruby /etc/rc4.d/S90heroku start
root 2204 0.0 0.0 10056 1384 ? S May27 0:00 sh -c /root/fabber/master_fab 2>&1 | tee -a /var/log/heroku_fab.log
root 2206 0.0 0.0 2640 452 ? S May27 0:00 tee -a /var/log/heroku_fab.log
root 2236 0.0 0.0 11496 944 ? Ss May27 0:00 /usr/sbin/cron
root 2296 0.0 0.0 10056 1400 ? S May27 0:00 bash
root 2297 0.0 0.3 66996 28772 ? S May27 0:02 ruby railgun_web.rb -p 1000
root 2320 1.4 0.3 63532 27360 ? Ss May27 12:15 /usr/bin/ruby /home/railgun/railgun.rb
root 2323 2.6 0.3 67600 29352 ? Ss May27 22:39 /usr/bin/ruby /home/railgun/uncle_jimbo.rb
root 3871 0.0 0.0 0 0 ? S< May27 0:00 [loop2]
root 4167 0.0 0.0 0 0 ? S< May27 0:00 [loop3]
root 5120 0.0 0.0 0 0 ? S< May27 0:00 [loop7]
root 5223 0.0 0.0 0 0 ? S< May27 0:00 [loop8]
root 6790 0.0 0.0 0 0 ? S< May27 0:00 [loop13]
1013 6803 0.0 0.0 6248 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 47123 log/server_12599_43eedc9_8d52_47123.log 12599_43eedc9_8d52
1013 6805 0.0 0.5 95368 41480 ? S May27 0:08 /usr/local/bin/ruby /usr/local/bin/thin -p 47123 -e production -R /home/heroku_rack/heroku.ru start
root 8225 0.0 0.0 0 0 ? S< May27 0:00 [loop16]
root 18730 0.0 0.0 10056 1416 ? S May27 0:00 bash
root 19608 0.0 0.0 10052 1412 ? S May27 0:00 bash
root 28749 0.0 0.0 0 0 ? S< May27 0:00 [loop15]
1055 28762 0.0 0.0 6248 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 58852 log/server_15841_c5d2715_8b13_58852.log 15841_c5d2715_8b13
1055 28764 0.0 0.7 108672 54948 ? S May27 0:01 /usr/local/bin/ruby /usr/local/bin/thin -p 58852 -e production -R /home/heroku_rack/heroku.ru start
root 3657 0.0 0.0 0 0 ? S< May27 0:00 [loop38]
slug3635 3670 0.0 0.0 6248 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 59168 log/server_3635_20e3e3a_def5_59168.log 3635_20e3e3a_def5
slug3635 3672 0.0 0.8 118256 60484 ? S May27 0:02 /usr/local/bin/ruby /usr/local/bin/thin -p 59168 -e production -R /home/heroku_rack/heroku.ru start
root 17444 0.0 0.0 0 0 ? S< May27 0:00 [loop40]
1080 17457 0.0 0.0 6248 1496 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 42355 log/server_11148_6794cd5_a238_42355.log 11148_6794cd5_a238
1080 17459 0.0 0.8 117160 61436 ? S May27 0:02 /usr/local/bin/ruby /usr/local/bin/thin -p 42355 -e production -R /home/heroku_rack/heroku.ru start
root 20903 0.0 0.0 0 0 ? S< May27 0:00 [loop41]
slug2195 20944 0.0 0.0 6248 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 37142 log/server_2195_6fda6fd_339c_37142.log 2195_6fda6fd_339c
slug2195 20947 0.0 0.8 116936 60032 ? S May27 0:02 /usr/local/bin/ruby /usr/local/bin/thin -p 37142 -e production -R /home/heroku_rack/heroku.ru start
root 9224 0.0 0.0 0 0 ? S< May27 0:00 [loop14]
slug9519 9264 0.0 0.0 6244 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 17203 log/server_9519_da8d959_0a56_17203.log 9519_da8d959_0a56
slug9519 9267 0.1 0.8 123456 64928 ? S May27 0:29 /usr/local/bin/ruby /usr/local/bin/thin -p 17203 -e production -R /home/heroku_rack/heroku.ru start
root 12912 0.0 0.0 0 0 ? S< May27 0:00 [loop17]
1090 12928 0.0 0.0 6252 1500 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 20602 log/server_15138_c833c63_5c8e_20602.log 15138_c833c63_5c8e
1090 12930 0.0 0.8 116100 60612 ? S May27 0:01 /usr/local/bin/ruby /usr/local/bin/thin -p 20602 -e production -R /home/heroku_rack/heroku.ru start
root 26763 0.0 0.0 0 0 ? S< May27 0:00 [loop49]
slug1816 26776 0.0 0.0 6244 1492 ? S May27 0:00 /bin/bash /usr/local/bin/thin_launcher 51714 log/server_1816_33835df_a171_51714.log 1816_33835df_a171
slug1816 26778 0.0 0.5 88628 41516 ? S May27 0:01 /usr/local/bin/ruby /usr/local/bin/thin -p 51714 -e production -R /home/heroku_rack/heroku.ru start
root 13891 0.0 0.0 0 0 ? S< 01:13 0:00 [loop36]
root 18816 0.0 0.0 0 0 ? S< 01:20 0:00 [loop52]

 

  系统信息就这些了, 我们的程序跑在 Dyno Grid 中 , heroku 说 Dyno 类似于 mongrel , 其实现在都是 thin了 , 谁叫

mongrel 停止开发了呢.

 

   继续,部属程序的时候, 我的database.yml 是 Mysql 的, 但是在 Dyno 访问的是 PostgreSQL, 应该是 部属的时候,把

database.yml 替换了吧 ? 验证一下database.yml 叫它给重新生成了 .

::::::::::::::


config/database.yml


::::::::::::::


---


production:


encoding: unicode


adapter: postgresql


username: xxxxxxxxxx


port: 5432


host: 10.250.xxx.47


database: xxxxxxxxxx


password: xxxxxxxxxx

 

heroku还说 memcached 用来保存 page fragment cache ,  估计对 production.rb 也改了 , 但是我看了下 , 没有变化, 没有自动使用 memcached? 还是因为我的是 free 的 ?

 

 

 

继续继续, 看着系统进程里面有几个 heroku 自己的服务 , 拿来欣赏一下 :)

 


::::::::::::::


/etc/rc4.d/S90heroku


::::::::::::::


#!/usr/bin/ruby





LOG="/var/log/heroku_fab.log"





action = ARGV[0]





def start


puts "===== Heroku Fab - begin ====="


puts "Updating Fabber"


output = `cd /root/fabber && git pull`


output = "\nUpdating Fabber\n\n#{output}"


File.open(LOG, 'w') { |f| f.write output }





puts "Calling Preload Fab"


output = `/root/fabber/preload_fab`


output = "\nPreload Fab\n\n#{output}\n"


File.open(LOG, 'a') { |f| f.write output }





puts "Calling Master Fab"


system "echo Calling Master Fab | tee -a #{LOG}"


system "/root/fabber/master_fab 2>&1 | tee -a #{LOG}"





puts "===== Heroku Fab - done ====="


end





if action == 'start'


start


else


puts "Usage: heroku start"


end


 

   root 里面的东西 看不到 ,但是 , 这并不影响咱们看log呀:

 

写道
Updating Fabber

Updating f8e4481..b0d5239
Fast forward
lib/support.rb | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)

Preload Fab

Moving home, tmp, var, and tmp to disk1...----> Fetching fabber in /root/fabber/
Initialized empty Git repository in /root/fabber/.git/
----> Checking out branch origin/v50

Calling Master Fab
** Proclaiming boot **
true
Initialized empty Git repository in /disk1/tmp/git-sh/.git/
Initialized empty Git repository in /disk1/tmp/git-sh/.git/
cat git-sh.bash git-completion.bash git-sh-config.bash > git-sh
chmod 0755 git-sh
install -m 0755 git-sh /usr/local/bin
alias 'sh' added to ~/.gitconfig
Installing droid lib
----> Fetching droid in /usr/local/droid/ as fabber@
Initialized empty Git repository in /usr/local/droid/.git/

----> Checking out branch origin/v50
Branch v50 set up to track remote branch refs/remotes/origin/v50.
Fixing broken gem permissions...
/root/fabber/lib/railgun.rb:114: warning: parenthesize argument(s) for future version
---- Calling /root/fabber/lib/railgun.rb
Updating railgun
----> Fetching railgun in /home/railgun/ as
----> Checking out branch origin/v50
Branch v50 set up to track remote branch refs/remotes/origin/v50.
Starting railgun web
Installing heroku rack
----> Fetching heroku_rack in /home/heroku_rack/ as
----> Checking out branch origin/v50
Branch v50 set up to track remote branch refs/remotes/origin/v50.
installing /usr/local/bin/service_monitor
Starting Uncle Jimbo
---- verifying firewall
** Proclaiming online **
Sending instance.up
----- verifying connectivity with cloud
ok, done!
Stopping MTA: exim4_listener.

 

   thin_launcher 比较简单

 

写道
::::::::::::::
/usr/local/bin/thin_launcher
::::::::::::::
#!/bin/bash

rm -f log/crashlog.log

thin -p $1 -e $RACK_ENV -R /home/heroku_rack/heroku.ru start > $2 2>&1

# create the crashlog if exited without getting explicit kill signal
if [ $? != 0 ]; then
cp $2 log/crashlog.log
fi
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    DF15Demo:该项目有助于使用Heroku执行复杂的数据计算,并在Salesforce UI中显示相同的内容

    加入我们,探索使用Heroku的Salesforce1数据的时间序列分析。 作为示例,我们将演示如何比较两个不同时间范围内的度量。 本节将从时间序列分析的基础开始,并通过编写自己的Heroku应用程序演示如何超越Salesforce1...

    Belly-Button-Biodiversity-Dashboard:应用链接-https

    这个仪表板由公共科学实验室(Public Science Laboratory)开发,并在Heroku平台上进行了部署,为用户提供了便捷的数据探索体验。 1. **JavaScript技术**:作为网页开发的重要语言,JavaScript在这里扮演了核心角色...

    surface_integrals_calc_proj:给定曲面和矢量场的曲面积分计算器

    《表面积分计算项目:探索曲面与向量场的数学魅力》 在数学的世界里,曲面积分是一种至关重要的概念,它广泛应用于物理、工程和计算机科学等领域。"surface_integrals_calc_proj"是一个专为解决此类问题设计的工具...

    (源码)基于 Koa2 的 FEBLOG API.zip

    # 基于 Koa2 的 FEBLOG API ## 项目简介 FEBLOG API 是一个基于 Node.js 和 Koa2 框架的 RESTful API 服务器,支持多种关系型数据库(如 PostgreSQL、MySQL、MariaDB、SQLite、MSSQL),并使用 Sequelize 作为 ORM。项目支持跨域请求、JSON 数据传输、JWT 身份认证等功能,适用于构建前后端分离的应用。 ## 主要特性和功能 跨域支持通过配置支持跨域请求。 数据传输格式支持 applicationxwwwformurlencoded、multipartformdata、applicationjson 格式的 POST、PUT、DELETE 请求。 JWT 身份认证通过 JWT 实现用户身份认证。 数据库支持使用 Sequelize ORM 支持 PostgreSQL、MySQL、MariaDB、SQLite、MSSQL 等多种数据库。

    存储器实验资料.zip

    存储器实验资料.zip

    (源码)基于 Python 的知乎热榜爬虫及数据处理项目.zip

    # 基于 Python 的知乎热榜爬虫及数据处理项目 ## 项目简介 本项目基于 Python 编程语言,旨在实现知乎热榜的定时跟踪以及相关数据的存储与查询操作。通过爬虫技术获取知乎热榜问题的详细信息,将数据存入数据库,同时提供一系列 SQL 查询示例帮助用户熟悉 SQL 基本语法,还包含使用 Selenium 实现 GPA 计算器的功能。 ## 项目的主要特性和功能 1. 知乎热榜爬虫定期爬取知乎热榜,获取问题摘要、描述、热度、访问人数、回答数量等基本信息,并将数据存入数据库。 2. 可定制爬虫逻辑用户可以选择删除已有代码从零开始编写,也可以完成代码填空实现相应功能。 3. GPA 计算器使用 Selenium 模拟点击登录 WebVPN,登录 info 并访问成绩单页面,查询成绩并计算每学期的绩点。 4. SQL 练习提供一系列基于 MySQL 数据库的 SQL 查询练习,帮助用户熟悉基本的 SQL 语法,如添加新列、数据填充、关键词查询等。

    (源码)基于C语言的学生信息管理系统.zip

    # 基于C语言的学生信息管理系统 ## 项目简介 这是一个基于文本界面的学生信息管理系统,旨在通过简单的文本输入实现学生信息的添加、查找、修改和删除操作。系统采用链表数据结构存储学生信息,并支持文件读写功能以持久化存储数据。 ## 项目的主要特性和功能 ### 主要特性 1. 文本界面操作用户通过控制台输入指令完成操作。 2. 链表数据结构使用链表存储学生信息,方便信息的添加和删除。 3. 文件操作支持将学生信息数据保存到文件,以及从文件中读取数据。 ### 功能详解 登录验证用户需输入正确的学号和密码才能进入系统。 主界面展示显示系统主菜单,包括学生信息查找、删除、添加、修改和录入等功能。 学生信息查找根据学号查找学生信息。 学生信息删除根据学号删除学生信息。 学生信息添加可以添加新的学生信息到系统中。 学生信息修改可以修改已存在的学生信息。 学生信息录入展示所有存储的学生信息。 辅助功能

    (源码)基于VS Code的px到rpx转换工具.zip

    # 基于VS Code的px到rpx转换工具 ## 项目简介 本项目是一款VS Code插件,旨在将前端代码里的单位px转换为rpx。当设计师在设计稿中使用px单位时,开发者能够借助该工具快速把代码中的px转换为小程序适用的rpx单位。它借助语法分析技术实现精准转换,避免误改其他属性里的px。 ## 项目的主要特性和功能 1. 自动转换功能能通过简单命令自动识别并转换style标签内所有声明中的px为rpx。 2. 精准转换利用语法分析,仅对真正的单位值进行转换,防止错误修改其他内容中的px字符。 3. 部分转换支持可选择部分样式代码进行转换,操作灵活便捷。 ## 安装使用步骤 假设用户已下载本项目源码文件且安装了VS Code环境。 1. 安装插件打开VS Code,进入侧边栏的扩展视图,搜索并安装“px2rpx”插件。 2. 重启VS Code安装完成后重启VS Code使插件生效。

    test文件资包 传递使用

    test文件资包。传递使用

    LCCC2701 智能车灯控制系统设计 20250329

    主控:AT89C52 显示:LCD1602 光照检测:光敏电阻 距离检测:超声波测距 远光灯 近光灯 按键(设置阈值) 1、使用光敏电阻实时检测环境光线强度,设置阈值判断是否开启远光灯; 2、利用超声波传感器测量迎面车辆距离,设置安全距离阈值,自动切换到近光灯; 3、加入延时功能(例如在检测到迎面车辆后等待3秒再切换灯光),以减少频繁切换,提升平滑性。 4、所选传感器模块、执行器模块、电源与接口电路等模块的型号需要是便宜的。

    ESP32之阿里云OTA固件升级(源码)

    esp-idf-v5.3.2

    信息安全领域实战项目【信息安全领域】实战项目汇总:涵盖网络渗透测试、Web应用安全加固、企业安全策略制定等内容多个信息安全领域的实战

    内容概要:本文介绍了多个信息安全领域的实战项目,涵盖网络渗透测试、Web应用安全加固、企业安全策略制定与实施、恶意软件分析、数据泄露应急响应、物联网设备安全检测、区块链安全审计和云安全防护。每个项目都详细描述了其目标和具体实施步骤,包括信息收集、漏洞扫描、利用和修复、安全配置、风险评估、制度建设、培训教育、样本获取与分析、事件响应、遏制措施、调查取证、数据恢复、安全检测、架构分析、智能合约审计、共识机制审查、云环境评估、访问管理、网络安全防护等方面。 适合人群:信息安全从业者、IT管理人员、安全顾问、系统管理员、开发人员以及对信息安全感兴趣的人员。 使用场景及目标:①为信息安全从业人员提供实际操作指导,帮助其掌握不同场景下的安全防护技能;②为企业提供全面的信息安全保障方案,确保其信息系统和数据的安全性;③为开发人员提供安全编码和系统设计的最佳实践指南,提高应用程序的安全性;④为安全研究人员提供深入分析恶意软件和区块链系统的工具和方法。 阅读建议:读者可以根据自身需求选择感兴趣的部分进行深入学习,建议结合实际案例进行实践操作,同时关注最新的安全技术和法规要求,以确保所学知识与时俱进并能应用于实际工作中。

    (源码)基于C语言和STM32F0系列微控制器的宏键盘系统.zip

    # 基于C语言和STM32F0系列微控制器的宏键盘系统 ## 项目简介 本项目是基于C语言和STM32F0系列微控制器开发的宏键盘系统。该系统可让用户自定义宏按键,实现快速输入或自动化任务,涵盖硬件的GPIO输入输出控制、USB通信以及中断处理等功能。 ## 项目的主要特性和功能 宏定义用户能通过定义keymappings.h文件中的宏按键,自定义按键行为。 USB通信利用STM32F0系列微控制器的USB库,支持HID类通信。 GPIO控制实现对键盘按键读取和发送操作的控制。 中断处理可处理按键状态变化、USB通信等外部中断请求。 电源管理对微控制器的睡眠、停止和待机等电源模式进行管理。 ## 安装使用步骤 ### 硬件准备 确保STM32F0系列微控制器(如STM32F042K6)的GPIO引脚、USB接口等硬件连接正确。 保证所有必要外设(如LED、按键)正确连接且可用。 ### 软件准备 下载并解压项目源代码。

    COMSOL多物理场仿真中熔池枝晶模型的构建与应用

    内容概要:本文详细介绍了如何利用COMSOL Multiphysics软件构建熔池枝晶模型,用于模拟金属在凝固过程中枝晶的生长行为。主要内容涵盖三个关键模块:传热、流体流动和相场。通过定义相应的偏微分方程(如传热方程、Navier-Stokes方程和相场方程),设置适当的边界条件和初始条件,并进行多物理场耦合求解,最终实现了对熔池温度分布、速度场及枝晶生长过程的精确模拟。此外,还探讨了如何优化求解器配置、处理移动边界条件、引入各向异性效应以及提高计算效率的方法。 适合人群:从事材料科学、冶金工程、增材制造等领域研究的专业人士和技术人员。 使用场景及目标:适用于需要深入了解金属凝固过程中微观结构演变机制的研究项目,特别是在激光熔覆、焊接等工艺中,帮助研究人员预测和优化材料性能。 其他说明:文中不仅提供了详细的建模步骤指导,还包括一些实用技巧,如参数选择、网格划分策略、热源耦合方式等,有助于解决实际建模过程中可能遇到的问题。

    基于COMSOL的地下二氧化碳封存多物理场耦合仿真研究

    内容概要:本文详细介绍了利用COMSOL Multiphysics进行地下二氧化碳封存仿真的方法和技术要点。主要内容涵盖两相流模块设置、温度场耦合、地层分层建模以及力学模块处理等方面。文中不仅提供了具体的数学模型和代码片段,如相对渗透率函数、热膨胀系数函数等,还分享了许多实际操作中的经验和教训,强调了不同物理场之间的相互作用及其对模拟结果的影响。 适合人群:从事地质工程、环境科学、石油工程等领域研究的专业人士,尤其是那些需要进行地下流体运移和储层特性研究的科研工作者。 使用场景及目标:适用于希望深入了解地下二氧化碳封存机制的研究人员,帮助他们掌握如何使用COMSOL软件构建复杂的多物理场耦合模型,从而更好地预测和评估二氧化碳封存的安全性和有效性。 其他说明:文章中提到的技术细节对于确保模拟精度至关重要,例如正确处理单位转换、选择合适的渗透率模型、考虑温度变化对岩石性质的影响等。此外,作者还提醒读者应注意避免一些常见的错误配置,以免导致不可靠的结果。

    ENCAP 2023打分表

    ENCAP 2023打分表

    中国上市公司协会:2022年中国上市公司董事会秘书履职报告.pdf

    中国上市公司协会:2022年中国上市公司董事会秘书履职报告

    MATLAB遗传算法解决电动车带时间窗路径规划与充电优化问题

    内容概要:本文详细介绍了利用MATLAB遗传算法解决带有时间窗约束的电动车路径规划和充电优化问题。首先,构建了客户点、充电站以及电动车的基本参数模型,然后设计了一套完整的遗传算法框架,包括染色体编码、适应度函数、交叉变异操作等。适应度函数综合考虑了总行驶距离、时间窗违约、电量透支等多个因素。通过多次迭代优化,最终得到了较优的路径规划方案,并展示了实验结果的可视化图形。此外,文中还讨论了一些调参技巧和实际应用中的注意事项。 适合人群:具有一定编程基础和技术背景的研究人员、工程师,特别是从事智能交通系统、物流配送优化领域的专业人士。 使用场景及目标:适用于需要进行电动车路径规划和充电管理的实际应用场景,如城市物流配送公司。主要目标是在满足客户需求和服务质量的前提下,最小化运营成本,提高车辆利用率。 其他说明:文中提供了详细的代码实现步骤和部分实验数据,有助于读者理解和复现研究结果。同时提到了一些实用的小技巧,如适当放宽时间窗惩罚系数可以降低总成本等。

    (源码)基于Arduino的超声波距离测量系统.zip

    # 基于Arduino的超声波距离测量系统 ## 项目简介 本项目是一个基于Arduino平台的超声波距离测量系统。系统包含四个超声波传感器(SPS)模块,用于测量与前方不同方向物体的距离,并通过蜂鸣器(Buzz)模块根据距离范围给出不同的反应。 ## 项目的主要特性和功能 1. 超声波传感器(SPS)模块每个模块包括一个超声波传感器和一个蜂鸣器。传感器用于发送超声波并接收回波,通过计算超声波旅行时间来确定与物体的距离。 2. 蜂鸣器(Buzz)模块根据超声波传感器测量的距离,蜂鸣器会给出不同的反应,如延时发声。 3. 主控制器(Arduino)负责控制和管理所有传感器和蜂鸣器模块,通过串行通信接收和发送数据。 4. 任务管理通过主控制器(Arduino)的 loop() 函数持续执行传感器任务(Task),包括测距、数据处理和蜂鸣器反应。 ## 安装使用步骤 1. 硬件连接

    COMSOL仿真中偶极光源的建模与优化方法详解

    内容概要:本文详细介绍了如何使用COMSOL进行偶极光源的建模与仿真。首先解释了偶极子光源的物理本质及其重要性,然后逐步指导读者完成从创建新模型、设置电流源、配置边界条件到最终结果分析的全过程。文中强调了关键步骤如正确设置电流分量、选择合适的边界条件(如PML)、合理划分网格以及如何解读远场辐射图等。此外,还提供了多个实用技巧和常见错误规避方法,帮助用户提高仿真的准确性和效率。 适合人群:从事光学仿真、电磁场研究的专业人士和技术爱好者。 使用场景及目标:适用于需要精确模拟微纳尺度下电磁波行为的研究项目,特别是涉及偶极子光源的应用场合。通过掌握这些技能,可以更好地理解和预测实际物理现象,从而为相关领域的科研工作提供有力支持。 其他说明:文章不仅涵盖了基本的操作流程,还包括了许多作者亲身经历的经验分享,使读者能够避开一些常见的陷阱并获得更好的仿真效果。同时,文中提供的代码片段可以帮助用户快速上手,将理论知识转化为具体实践。

Global site tag (gtag.js) - Google Analytics