Squid 3 安装配置详解

Squid 3 安装配置详解
Squid 3 安装配置详解

反向代理服务器Squid 3.0安装配置详解

一.反向代理的概念

二.反向代理工作原理

三.安装环境

四.安装准备

五.调整内核

六.调整文件描述符

七.调整端口范围

八.编译安装

九.配置说明

十.配置参考

十一.测试启动

十二.常用命令

附录1:参考资料链接

附录2:关键字解释

一.反向代理的概念

什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:

Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP 地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web 服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防止外部网

主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。

二.反向代理工作原理

反向代理服务器位于本地WEB服务器和Internet之间,如下图所示:

当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP 头标记来缓冲静态页面

三.环境

操作系统:CentOS 5.2

Squid:squid-3.0.STABLE13

四.准备

1.可以用下述命令获得squid

wget https://www.360docs.net/doc/5b1083073.html,/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz

2.建立squid用户

useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin

3.配置参数详解

?--prefix=/usr/local/squid3 :

指定squid日志,二进制文件和配置文件的默认位置,squid会将var目录也放在这下面,在这个目录下面会有日志文件,日志文件通常会很大,因此建议将其放在较大的磁盘下面,你可以使用—localstatedir 选项。

?--localstatedir=/bigdisk/var

指定var目录的安装位置

?--enable-dlmalloc[=LIB]

在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。请

https://www.360docs.net/doc/5b1083073.html,/dl/html/malloc.html更多关于dlmalloc的信息。?--enable-gnuregex

在访问控制列表和其他配置指令里,squid使用正则表达式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,你可以将这个选项加到./configure命令后。

?--enable-async-io[=N_THREADS]

异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。aufs 在多cup 系统上优势更为明显,设置的线程数量不要过多。squid默认根据缓存目录的数量,自动计算需要使用多少线程。

?--enable-removal-policies='heap,lru'

排除策略是squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。

squid-2.5支持3个排除策略:最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。。LRU是默认的,它以双链表数据结构执行。

?--enable-delay-pools

延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。

当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工延迟。

?--enable-snmp

简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库。

?--enable-cachemgr -hostname[=hostname]

cachemgr是一个CGI程序,你能使用它来管理查询squid。默认cachemgr的

hostname值是空的,但你能使用该选项来指定一个默认值

?--enable-htcp

HTCP是超文本缓存协议--类似于ICP的内部缓存协议。

?--enable-ssl

使用该选项赋予squid终止SSL/TLS连接的能力。注意这仅仅工作在web加速器中用以加速请求。

?--with-openssl[=DIR]

假如必要,你使用该选项来告诉squid到哪里找到OpenSSL库或头文件。假如它们不在默认位置,在该选项后指定它们的父路径。例如:

?% ./configure --enable-ssl --with-ssl=/opt/foo/openssl 在这个例子中,你的编译器将在/opt/foo/openssl/include目录中找头文件,在/opt/foo/openssl/lib中找库文件。

?--enable-cache-digests

Cache消化是ICP的另一个替代,但有着截然不同的特性。

?--enable-err-languages="Simplify_Chinese"

?--enable-default-err-languages="Simplify_Chinese"

上面两个选项告诉Squid编入并使用简体中文错误信息。

squid支持定制错误消息,错误消息可以用多种语言报告。该选项指定复制到安装目录($prefix/share/errors)的语言。假如你不使用该选项,所有可用语言被安装。

想知道何种语言可用,请见源代码包里errors目录下的目录列表。

?--enable-epoll

?--enable- linux-netfilter:

可以支持透明代理

?--enable-underscore

允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。

?--enable-arp-acl

可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。

?--disable-ident-lookups

防止系统使用RFC931规定的身份识别方法。

?--enable-cahce-digests

加快请求时,检索缓存内容的速度。

?--enable-icmp

加入icmp支持。

?--enable-kill-parent-hack

关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦。

五.调整内核

Squid在高负载下,需要大量的内核资源。特别的,你需要给你的系统配置比正常情况更高的文件描述符和缓存。文件描述符的限制通常很恼人。你最好在开始编译squid之前来增加这些限制的大小。

因为这点,你可能为了避免重建内核的麻烦,而倾向于使用预编译的二进制版本。不幸的是,不管如何你必须重建一个新内核。squid和内核通过数据结构来交换信息,数据结构的大小不能超过设置的文件描述符的限制。squid在运行时检查这些设置,并且使用最安全的(最小的)值。这样,即使预编译的二进制版本有比你的内核更高的文件描述符,但还是以你系统内核的实际数值为主。

为了改编一些参数,你需要重建新内核。这个过程在不同的操作系统之间不同。假如需要,请参阅Unix系统管理员手册(Prentice Hall出版)或者你的操作系统文档。假如你正使用Linux,可能不必重建内核

六.文件描述符

文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix通常有一个系统级的限制。

因为squid的工作方式,文件描述符的限制可能会极大的影响性能。当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。

在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024个文件描述符足够了。非常忙的 cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2倍。

通常在你的Unix shell中能找到系统的文件描述符限制。所有的C shell及其类似的shell有内建的limit命令。更新的Bourne shell及其类似的shell有一条叫做ulimit的命令。为了发现你的系统的文件描述符限制,试运行如下命令:

在我们的Linux下运行:

# ulimit -n

1024

很显然1024可能无法满足需求,重新设置

# ulimit -HSn 65536

# ulimit -n

65536

需要将ulimit -HSn 65536设置在/etc/rc.d/rc.local中,防止重启后失效, 花费时间来增加这个限制值的大小。否则,squid在高负载时执行性能将很低。

当然你还可以在每一次系统启动后执行上述echo和ulimit命令,或者至少在squid启动之前。假如你使用某个rc.d脚本来启动squid,那是一个放置这些命令的好地方。

七.临时端口范围

临时端口是TCP/IP栈分配给出去连接的本地端口。换句话说,当squid发起一条连接到另一台服务器,内核给本地socket分配一个端口号。这些本地端口号有特定的范围限制。例如,在FreeBSD上,默认的临时端口范围是1024-5000。

临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些TCP连接在它们被关闭时进入TIME_WAIT状态。当连接进入TIME_WATI 状态时,临时端口号不能被重用。

你能使用netstat命令来显示有多少个连接进入这个状态:

% netstat -n | grep TIME_WAIT

Proto Recv-Q Send-Q Local Address Foreign Address (state)

tcp4 0 0 192.43.244.42.19583 212.67.202.80.80 TIME_WAIT tcp4 0 0 192.43.244.42.19597 202.158.66.190.80 TIME_WAIT tcp4 0 0 192.43.244.42.19600 207.99.19.230.80 TIME_WAIT tcp4 0 0 192.43.244.42.19601 216.131.72.121.80 TIME_WAIT tcp4 0 0 192.43.244.42.19602 209.61.183.115.80 TIME_WAIT tcp4 0 0 192.43.244.42.3128 128.109.131.47.25666 TIME_WAIT tcp4 0 0 192.43.244.42.3128 128.109.131.47.25795 TIME_WAIT tcp4 0 0 192.43.244.42.3128 128.182.72.190.1488 TIME_WAIT tcp4 0 0 192.43.244.42.3128 128.182.72.190.2194 TIME_WAIT

注意这个例子中既有客户端连接又有服务器端的连接。客户端连接有3128作为临时端口号,服务器端连接有80作为远程主机的端口号。临时端口号出现在本地地址栏里。在该例子里,它们是19000秒。

在Linux上,简单的写一对数字到下列指定文件:

# echo "1024 40000" > /proc/sys/net/ipv4/ip_local_port_range

不要忘记将这些命令加到你的系统启动脚本中,以使机器每一次重启后都生效。

八.安装

tar -zxvf squid-3.0.STABLE13.tar.gz

cd squid-3.0.STABLE13

./configure \

--prefix=/usr/local/squid3 \

--enable-dlmalloc \

--enable-gnuregex \

--enable-async-io \

--enable-removal-policies='heap,lru' \

--enable-delay-pools \

--enable-snmp \

--enable-storeio='ufs,aufs,null' \

--disable-wccp \

--enable-kill-parent-hack \

--disable-select \

--enable-auth=basic \

--with-aio \

--disable-ident-lookup \

--with-filedescriptors=65536 \

--enable-err-languages="Simplify_Chinese" \

--enable-default-err-languages="Simplify_Chinese " \

--enable-epoll \

--enable-linux-netfilter \

--enable-underscore \

--enable-arp-acl \

--enable-cahce-digests \

--enable-icmp \

--enable-large-cache-file \

--with-large-files \

--localstatedir=/disk2/squid \

--enable-stacktraces

make

make install

如果是2.6的内核,才能支持epoll的IO模式,旧版本的内核则只能选择poll或其他模式了;另外,记得带上支持大文件的选项,否则在 accesslog等文件达到2G的时候就会报错。

九.配置基本知识(摘自squid中文指南)

基本知识:

Squid的配置文件相对规范。它与其他许多unix程序相似。每行以配置指令开始,后面跟着数字值或关键字。在读取配置文件时,squid忽略空行和注释掉的行(以#开始)。

如下是一些配置行示例:

cache_log /squid/var/cache.log

# define the localhost ACL

acl Localhost src 127.0.0.1/32

connect_timeout 2 minutes

log_fqdn on

某些指令取唯一值。在这些情形下,重复赋予该指令不同的值,将覆盖前面的值。

例如,下面是一个连接超时值。第一行无效,因为第二行覆盖了它:

connect_timeout 2 minutes

connect_timeout 1 hour

另外,某些指令取列表值。在这些情形下,每一个新增的值都有效。

"扩展方式"指令以这种方法工作:

extension_methods UNGET

extension_methods UNPUT

extension_methods UNPOST

对这些基于列表的指令,你通常能在同一行中赋予多个值:

extension_methods UNGET UNPUT UNPOST

许多指令有通用类型。例如,连接超时值是一个时间规范,在数字后面跟着时间单元。例如:

connect_timeout 3 hours

client_lifetime 4 days

negative_ttl 27 minutes

类似的,大量的指令指向文件大小或者内存额度。

例如,你可以这样编写大小规范:十进制数字后面跟bytes,KB,MB或GB。例如:

minimum_object_size 12 bytes

request_header_max_size 10 KB

maximum_object_size 187 MB

另一种值得提起的类型是触发器,它的值是on或者off。

许多指令使用该类型。例如:

server_persistent_connections on

strip_query_terms off

prefer_direct on

通常,配置文件指令能以任何顺序出现。然而,如果某个指令指向的值被其他指令所定义,那么顺序就很重要。访问控制列表是个好的例子。acl被用在 http_access规则之前必须被定义:

acl Foo src 1.2.3.4

http_access deny Foo

squid.conf文件里的许多东西是大小写敏感的,例如指令名。你不能将http_port写成HTTP_port。

默认的squid.conf文件包含了对每个指令的大量注释,以及指令的默认值。例如:

# TAG: persistent_request_timeout

# How long to wait for the next HTTP request on a persistent

# connection after the previous request completes.

##Default:

# persistent_request_timeout 1 minute

每次安装squid后,当前默认配置文件存放在$prefix/etc目录下的

squid.conf.default。既然指令每次都有所改变,你能参考该文档,以获取最近的更新。

User ID

你可能知道,unix进程和文件拥有文件和组属主的属性。你必须选择某个用户和组给squid。该用户和组的组合,必须对大部分squid相关的文件和目录有读和写的权限。

我高度推荐创建名为"squid"的用户和组。这避免了某人利用squid来读取系统中的其他文件。假如不止一个人拥有对squid的管理权限,你可以将他们加到squid组里。

unix进程继承了它们父进程的属主属性。那就是说,假如你以joe用户来启动squid,squid也以joe来运行。假如你不想以joe来运行 squid,你需要预先改变你的用户ID。这是su命令的典型功能。例如:

joe% su - squid

squid% /usr/local/squid/sbin/squid

不幸的是,运行squid并非总是如此简单。在某些情况下,你必须以root来启动squid,这依赖于你的配置。例如,仅仅root能绑定TCP套接字到特权端口上,如80。假如你必须以root来启动squid,你必须设置cache_effective_user指令。它告诉squid,在执行完需要特别权限的任务后,变成哪个用户。例如:

cache_effective_user squid

你提供的该名字必须是有效用户(在/etc/passwd文件里)。请注意仅仅当你以root来启动squid时,你才需要用到该指令。仅仅root有能力来随意改变用户身份。假如你以joe来启动squid,它不能改变到squid用户。

你可能尝试不设置cache_effective_user,直接以root来运行squid。假如你试过,你会发现squid拒绝运行。这违背了安全规则。假如外部攻击者有能力危及或利用squid,他能获取对系统的全部访问权。尽管我们努力使squid安全和少bug,但还是稳重点好。

假如你没有设置cache_effective_user,以root来启动squid,squid使用nobody 作为默认值。不管你选择什么用户ID,请确认它有对下面目录的读访问权:

$prefix/etc,$prefix/libexec,$prefix/share.该用户ID也必须有对日志文件

和缓存目录的写访问权。

squid也有一个cache_effective_group指令,但你也许不必设置它。默认的,squid 使用 cache_effective_user的默认组(从/etc/passwd文件读取)。

●端口号

http_port指令告诉squid在哪个端口侦听HTTP请求。默认端口是3128:

http_port 3128

假如你将squid作为加速器运行(见15章),你也许该将它设为80。

你能使用附加的http_port行,来指示squid侦听在多个端口上。假如你必须支持客户组(它们被配置得不一致),这点就经常有用。例如,来自某个部门的浏览器发送请求到3128,然而另一个部门使用80端口。简单的将两个端口号列举出来:

http_port 3128

http_port 8080

你也能使用http_port指令来使squid侦听在指定的接口地址上。当squid作为防火墙运行时,它有两个网络接口:一个内部的和一个外部的。你可能不想接受来自外部的http 请求。为了使squid仅仅侦听在内部接口上,简单的将IP地址放在端口号前面:

http_port 192.168.1.1:3128

●日志文件路径

你现在你关注的唯一事情是,squid将它的日志放在何处。默认的日志目录是squid安装位置下的logs 目录。例如,假如你在./configure时没有使用 --prefix=选项,那么默认的日志文件路径是/usr/local/squid/var/logs.

你必须确认日志文件所存放的磁盘位置空间足够。在squid写日志时如果接受到错误,它会退出和重启。该行为的主要理由应引起你的注意。squid想确认你不会丢失任何重要的日志信息,特别是你的系统被滥用或者被攻击时。

squid 有三个主要的日志文件:cache.log,access.log,store.log.第一个文件即cache.log,包含状态性的和调试性的消息。当你刚开始运行squid时,你应密切的关注该文件。假如squid拒绝运行,理由也许会出现在cache.log文件的结尾处。在正常条件下,该文件不会变得很大。也请注意,假如你以 -s选项来运行squid,重要的cache.log消息也可被送到你的syslog进程。通过使用cache_log指令,你可以改变该日志文件的路径:

cache_log /squid/logs/cache.log

access.log文件包含了对squid发起的每个客户请求的单一行。每行平均约150个字节。也就是说,在接受一百万条客户请求后,它的体积约是 150M。请使用cache_access_log 指令来改变该日志文件的路径:

cache_access_log /squid/logs/access.log

假如因为某些理由,你不想squid记录客户端请求日志,你能指定日志文件的路径为

/dev/null. store.log文件对大多数cache管理员来说并非很有用。它包含了进入和离开缓存的每个目标的记录。平均记录大小典型的是175-200字节。然而,squid不在store.log里对cache点击创建接口,所以它比access.log包含少得多的记录。请使用 cache_store_log指令来改变它的位置:

cache_store_log /squid/logs/store.log

通过指定路径为none,你能轻易的完全禁止store.log日志:

cache_store_log none

假如你不小心,squid的日志文件增加没有限制。某些操作系统对单个文件强制执行2G 的大小限制,即使你有充足的磁盘空间。超过该限制会导致写错误,这样 squid就会退出。为了保证日志文件大小合理,你应创建任务来有规律的重命名和打包日志。squid有内建功能来使这个容易做到。请见13.7章关于日志轮循的解释。

访问控制

现在,我只讲述少量的访问控制方法,以使热心的读者能快速开始使用squid。

squid 默认的配置文件拒绝每一个客户请求。在任何人能使用代理之前,你必须在squid.conf文件里加入附加的访问控制规则。最简单的方法就是定义一个针对客户IP 地址的ACL和一个访问规则,告诉squid允许来自这些地址的HTTP请求。squid有许多不同的ACL类型。src类型匹配客户IP地址,squid会针对客户HTTP请求检查

http_access规则。这样,你需要增加两行:

acl MyNetwork src 192.168.0.0/16

http_access allow MyNetwork

请将这些行放在正确的位置。http_access的顺序非常重要,但是acl行的顺序你不必介意。你也该注意默认的配置文件包含了一些重要的访问控制,你不应该改变或删除它们,除非你完全理解它们的意义。在你第一次编辑squid.conf文件时,请看如下注释:

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

在该注释之后,以及"http_access deny all"之前插入你自己的新规则。为了彻底说明,如下是一个合理的初始访问控制配置,包括推荐的默认控制和早先的例子:

acl All src 0/0

acl Manager proto cache_object

acl Localhost src 127.0.0.1/32

acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535 acl SSL_ports 443 563

acl CONNECT method CONNECT

acl MyNetwork src 192.168.0.0/16

http_access allow Manager Localhost

http_access deny Manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow MyNetwork

http_access deny All

可见主机名

希望你不必担心visible_hostname指令。然而,假如squid不能发现它所运行的机器的主机名,你就必须设置它。如果发生这样的事,squid抱怨和拒绝运行:

% squid -Nd1

FATAL: Could not determine fully qualified hostname. Please set

'visible_hostname'

有大量的理由使squid需要知道主机名:

主机名出现在squid的错误消息里,这帮助用户验证潜在问题的源头。

主机名出现在squid转发的cache单元的HTTP Via头里。当请求到达原始主机时,Via 头包含了在传输过程中涉及的代理列表。squid也使用Via头来检测转发环路。我将在第10章里讨论转发环路。

squid对特定事务使用内部URL,例如FTP目录列表的图标。当squid对FTP目录产生HTML页面时,它插入小图标用以指明该目录中的文件类型。图标URL包含了cache的主机名,以便web浏览器能直接从squid请求它们。

每个从squid响应的HTTP回复包含了X-Cache头。这并非官方HTTP头。它是一个扩展头,用以指明该响应是cache点击还是cache丢失。既然请求和响应可能经过多个cache,每个X-Cache头包含了cache报告点击或丢失的名字。如下是一个通过2个cache的响应示例:

HTTP/1.0 200 OK

Date: Mon, 29 Sep 2003 22:57:23 GMT

Content-type: text/html

Content-length: 733

X-Cache: HIT from https://www.360docs.net/doc/5b1083073.html,

X-Cache: MISS from https://www.360docs.net/doc/5b1083073.html,

squid 在启动时试图自动获取主机名。首先它调用gethostname()函数,这通常能返回正确的主机名。接着,squid调用 gethostbyname()函数尝试对主机名进行DNS查询。该函数典型的返回IP地址和系统的规范名。假如gethostbyname()成功,squid在错误消息里,Via头里等地方使用这个规范名。

因为大量的理由,squid可能不能检测到它的规范主机名,包括:

主机名可能未设置。

主机名可能从DNS区域或/etc/hosts文件里丢失。

squid系统的DNS客户端配置可能不正确或丢失。在unix系统上,你该检查/etc/resolv.conf和/etc/host.conf文件。

假如你看到上述的致命错误,你必须修正主机名和DNS信息,或者显式的给squid指明主机名。在大多数情况下,请确认"hostname"命令返回一个完全规范的主机名,并且在

/etc/hosts文件里增加这个接口。假如这样不成功,请在squid.conf里设置可见主机名:

visible_hostname https://www.360docs.net/doc/5b1083073.html,

十.配置(仅供参考)

http_port 80 accel vhost vport

#选项 http_port 指定squid监听HTTP请求的端口,一般都设置成80端口,这样使用户感觉不到反向代理的存在,就像访问真正的WEB服务器一样。设定squid为accel 加速模式,vhost必须要加.否则将无法将主机头转发至后端服务器,访问时就会出现无法找到主机头的错误

cache_peer 192.168.0.10 parent 80 0 no-query round-robin max-conn=32 originserver name=img

cache_peer_domain img https://www.360docs.net/doc/5b1083073.html,

# squid2.5以上都是用的cache_peer来指定所需要代理的服务器的IP 这一点很重要!由于本例squid 与web 不在同一服务器,因此需要cache_peer 指定相应WEB服务器IP

#acl

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl SSL_ports port 443 563

acl Safe_ports port 80 # http

acl Safe_ports port 8080

acl LanDstDM dstdomain . https://www.360docs.net/doc/5b1083073.html,

acl CONNECT method CONNECT

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access deny all

#base

visible_hostname https://www.360docs.net/doc/5b1083073.html,

#设定squid的主机名,如无此项squid将无法启动

cache_mgr cache@https://www.360docs.net/doc/5b1083073.html,

cache_effective_user squid

cache_effective_group squid

error_directory /usr/local/squid3/share/errors/Simplify_Chinese icon_directory /usr/local/squid3/share/icons

mime_table /usr/local/squid3/etc/mime.conf

cache_replacement_policy lru

#cache_dir

cache_dir ufs /var/tmp 10000 16 256

#100G其中1层目录16个,并且每个1层目录下又有256个2层目录[或者说子目录]#磁盘缓存的类型和目录,大小,一二级目录的设置,这里磁盘缓存大小是10G。

ufs是一种文件存储方式,因为os一般都是从内存获取数据,那么内存的东西必须最后写的硬盘上~

sync 同步的时候用的ufs 那么squid也是一样

ufs一般是同时写入内存和硬盘

注意:size是按照M为单位的也就这个目录中最大存储容量的上限

cache_mem 2048 MB

#共享内存大小(squid在提供服务的时候所使用的内存)

max_open_disk_fds 0

maximum_object_size 512 KB

maximum_object_size_in_memory 256 KB

#最大内存缓存OBJECT值~如果超过则不再内存中缓存~而存入IO中!

#keepalived

client_persistent_connections off

server_persistent_connections on

#persistent_request_timeout 60 seconds

memory_pools on

memory_pools_limit 64 MB

forwarded_for on

log_icp_queries off

via on

httpd_suppress_version_string off

ie_refresh off

tcp_recv_bufsize 32 KB

#acl webservices rep_header Server -i ^Apache ^nginx #broken_vary_encoding allow webservices

#hidden the squid header

#reply_header_access Server deny all

#reply_header_access X-Cache deny all

#reply_header_access Warning deny all

#reply_header_access Expires deny all

#reply_header_access Cache-Control deny all

#reply_header_access age deny all

#reply_header_access All deny all

ipcache_size 1024

ipcache_low 90

ipcache_high 95

memory_replacement_policy lru

#替换机制 (lru叫做最近不常用的单元unit一般就是常说的object 也就是当cache中的内容比如内存或硬盘达到上限时的那么就需要进行数据的换进和换出工作

hosts_file /etc/hosts

request_header_max_size 128 KB

#deny cache

hierarchy_stoplist cgi-bin ? \.php

acl QUERY urlpath_regex cgi-bin\? \.php \.css

acl DIRECT url_regex -i ^http:\/\/www\.yourdomain\.org\/$

acl DIRECT url_regex -i ^http:\/\/photo\.yourdomain \.org\/.*$ acl DIRECT url_regex -i ^http:\/\/www\.yourdomain

\.org\/index\.html$

cache deny QUERY

cache deny DIRECT

#request_body_max_size 0 KB

refresh_pattern ^ftp: 60 20% 10080

refresh_pattern ^gopher: 60 0% 1440

refresh_pattern . 0 20% 1440

#refresh_pattern -i \.css$ 360 50% 2880 reload-into-ims refresh_pattern -i \.js$ 1440 50% 2880 reload-into-ims refresh_pattern -i \.html$ 720 50% 1440 reload-into-ims refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload refresh_pattern -i \.gif$ 1440 50% 2880 ignore-reload refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload refresh_pattern -i \.png$ 1440 50% 2880 ignore-reload refresh_pattern -i \.bmp$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.doc$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.ppt$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.xls$ 1440 50% 2880 ignore-reload

Gems Simics 安装报告

课程设计报告 多核全系统模拟器GEMS分析 班级: 学号: 姓名: 2011年7月

1 目的和背景 由于单核处理器的处理能力已经接近极限,很难再有提高,多核处理器体系结构应运而生。在处理器体系结构的设计中,由于用硬件做测试投资大,且不便于设计,不具有多次性,因此体系结构软件仿真技术是研究中的一门新技术。 而多核全系统模拟器GEMS/Simics框架能够模拟单核处理器、并行式多处理器、阵列式处理器等体系机构。故本此课设选用构建GEMS+Simics框架,先逐步介绍搭建GEMS+Simics的各个环节,然后初步的研究单核和多核运行时程序在每个CPU中的运行情况,分析模拟器的构成及各部分的功能及性能分析。 2 安装流程 2.1软件准备 1) 在Ubuntu的官方网站上获得32位的Ubuntu10.04 2) 由于GEMS是开源软件首先在https://https://www.360docs.net/doc/5b1083073.html,/gems/registercgi下进行注册,然后再在https://https://www.360docs.net/doc/5b1083073.html,/gems/download.html下进行下载 3)下载Simics时麻烦一些,先在https://https://www.360docs.net/doc/5b1083073.html,/register/register.php地址上进行注册,而且必须作为学生或教职员工注册,然后申请免费的license。 4) 在https://www.360docs.net/doc/5b1083073.html,/ubuntu/pool/main/z/zlib/网站上下载和自己的系统配套的zlib1g_1.2.3.3.dfsg-15ubuntu1_i386.deb和zlib1g-dev_1.2.3.3.dfsg-15ubuntu1_i386.deb 5) 在https://www.360docs.net/doc/5b1083073.html,/index2/unixsystem/Solaris/sol-10-u2-ga-sparc-v4/或者https://www.360docs.net/doc/5b1083073.html,/us/sun/index.htm或者在网站上获得Soloris ,建议使用前者2.2安装Ubuntu 此处不建议使用虚拟机安装,因为会影响到后面的安装,如果有CD/DVD可以直接用CD/DVD安装;也可以用USB或硬盘安装;最简单的是虚拟光驱wubi安装,但磁盘空间最大只能为30G,虽然之后可以用LVPM工具进行扩充,但不建议使用,因为速度很慢,且容易出错。最好采用CD/DVD安装。 2.3GEMS/Simics安装 1) 安装必要的工具 s udo apt-get update sudo apt-get install build-essential sudo apt-get install bison sudo apt-get install flex sudo dpkg –-install zlib1g_1.2.3.3.dfsg-7ubuntu1_i386.deb sudo dpkg –-install zlib1g-dev_1.2.3.3.dfsg-7ubuntu1_i386.deb

Ruby的简单实例

Ruby的简单实例 ?出处:站长百科 ?原文地址:https://www.360docs.net/doc/5b1083073.html,/wiki/Ruby的简单实例 ?本电子书整理自站长百科Ruby简单实例词条,查看内容请访问网站。 让我们写一个计算阶乘的函数.对于阶乘的数学定义如下: n! = 1 (当 n==0 时) = n * (n-1)! (其它情况) 在Ruby里,可以这样来写: def fact(n) if n == 0 1 else n * fact(n-1) end end ?出处:站长百科

你可能会发现 end 的反复出现,正因为如此,Ruby被叫做"类Algol"语言.(实际上,Ruby的语法更像Eiffel).同时,你也可能会发现这段函数缺少 return语句.在这里是可以用return的,但却不是必须的,因为一个Ruby的函数会自动返回它所最后赋值的元素. 让我们来试试我们的阶乘函数.加入一行代码会使它成为一个可工作的程序: # Program to find the factorial of a number # Save this as fact.rb def fact(n) if n == 0 1 else n * fact(n-1) end end print fact(ARGV[0].to_i), "\n" ?出处:站长百科

这里,ARGV是一个包含命令行参数的数组,to_i将字符串转化为整数. % ruby fact.rb 1 1 % ruby fact.rb 5 120 当参数为40时它可以工作吗?它将使你的计算器产生溢出(overflow)... % ruby fact.rb 40 815915283247897734345611269596115894272000000000 它确实算出来了.实际上,Ruby能处理任何你机器的内存所允许的整数.实际上400!也可以: % ruby fact.rb 400 6403452284662389526234797031950300585070258302600295945 8684 4459428023971691868314362784786474632646762943505750358?出处:站长百科

《Ruby on Rails敏捷开发最佳实践》PDF教程

《Ruby on Rails敏捷开发最佳实践-精典章节收录》PDF教程 申明:本PDF教程由https://www.360docs.net/doc/5b1083073.html,网站搜集整理,如需转载,请务必注明出处。介绍:Ruby On Rails框架一经推出,立即引起B/S结构应用开发领域革命性的变化:开发者无需理会架构,只需要按Rails框架的约定向应用中填充代码,一切OK。 为了让众多Ruby On Rails学习、工作者,以及准备使用Ruby On Rails作为开发平台的开发人员能快速掌握Ruby On Rails的开发,作者精心编写了本书,书中既详细讲解了Ruby语言的基本语法,又重点介绍了Rails框架相关知识点的各种用法。最后给出两个综合案例,作为Ruby On Rails应用开发者的参考,读者可以通过这两个案例触类旁通,解决日常开发中的问题。 读者对象 本书适用于正在使用Ruby On Rails进行应用开发的开发人员、渴望了解Ruby On Rails框架的开发人员,尤其适合有初步的Java EE开发经验,想从Java EE平台过渡到Ruby On Rails开发平台的开发者。(未完待续) https://www.360docs.net/doc/5b1083073.html,

第15章Rails 的邮件抽象层 本章要点 ·电子邮件的基础知识 ·SMTP 协议初步 ·POP3协议初步 ·在Ruby 程序中使用SMTP 支持发送邮件 ·在Ruby 程序中使用POP3支持接收邮件 ·ActionMailer::Base 的邮件支持 ·在Rails 应用中发送邮件 ·发送HTML 格式邮件 ·发送带附件的邮件 ·电子邮件在实际应用中的用途 ·账户需要激活的优势 ·实现注册激活系统 15.4注册激活系统 本章将介绍一个注册激活系统,当用户输入注册信息时,必须输入有效的邮箱,当用户注册成功后,并不能立即登录系统,而要登录注册时输入的邮箱,然后通过该邮箱内的激活邮件来激活自己账户。通过这种方式可以防止用户恶意注册,保证用户必须输入有效的邮箱地址。 15.4.1基本注册功能 当用户注册一个账户时,实际上就等同于向底层数据表增加一条记录,因此本应用必须有持久层支持。本示例应用的注册功能需要一个数据表支持,该数据表用于保存系统的所有注册账户。下面是本应用的数据库脚本: drop database if exists regist_development; create database regist_development; use regist_development; --创建用户表 create table users ( id int not null auto_increment,

ruby入门教程 免费篇

介绍 这是一个短小的Ruby入门,完全读完只需20分钟。这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby 官方网站进行下载并安装。 交互式的Ruby 打开IRB(交互式Ruby外壳): 如果你使用Mac OS X,那么请打开终端窗口输入irb; 如果你使用Linux,那么请打开shell输入irb; 如果你使用windows,那么请在开始菜单中找到Ruby->fxri,并执行它。 Ok,在打开IRB之后,在其中输入"Hello World"。 Ruby听从你的安排! 发生了什么?我们刚才编写了世界上最短小的“Hello World”程序吗?这么说不太确切。第二行输出是IRB告诉我们:上一个表达式的评

估结果。如果我们希望打印出“Hello World”,那么就还需要一点努力: puts在Ruby中是一个简单的打印输出命令。后面的“=>nil”表示什么?——那是表达式的结果。Puts总是返回nil,这是Ruby中表示“绝对无值”(absolutely-positively-nothing value)的方式,看上去有些类似Java中的null。 你的免费计算器在这里! 无需做什么,我们就能把IRB作为一个简单的计算器使用: 这样就能计算3+2。够简单的!那么3乘以2如何?你可以在下面继续输入3*2,也可以回到上面(3+2处)重新修改你刚刚输入的计算公式。使用键盘上的向上键,使光标到达3+2那一行,再用左键移动光标到加号上,然后使用空格键进行修改。

下面,让我们尝试计算3的平方: 在Ruby语言中,**表示幂运算。那么如何计算平方根呢? Ok,等一下,表达式中的sqrt(9)表示什么?你一定能猜到这是计算9的平方根。而Math表示什么?不要着急,下面就让我们进一步了解像Math这样的模块。 模块——按照主题分组的代码 Math是Ruby内建的数学模块。在Ruby中,模块提供了两种角色:一种角色是将类似的方法聚集在同一个“家族”名下。因此,Math 也包括sin、tan这样的方法。第二种角色是一个圆点(dot),它标记了消息的接收者。什么是消息?在上面的例子中,sqrt(9)便是消息,它意味着调用sqrt方法取出9的平方根。 Sqrt方法调用的结果是3.0。你可能注意到它并不是3。这是因为多数情况下,数字的平方根并不是整数,所以这里返回了一个浮点数。

Ruby语言入门教程

Ruby语言入门教程 Version0.6 编著张开川 kaichuan_zhang@https://www.360docs.net/doc/5b1083073.html,

目录 自序 (3) 第一章概述 (4) 1.1编程语言的发展简史 (4) 1.2编程其实很容易 (5) 1.3Ruby的由来 (6) 1.4Ruby的特性 (7) 第二章 (8) 2.1下载Ruby1.8.5 (8) 2.2安装Ruby1.8.5for Windows (8) 2.3开始第一个小程序 (10) 2.4ruby语言的集成开发环境 (12) 第三章语法快览 (14) 3.1注释与分行 (14) 3.2分隔符 (15) 3.3关键字 (16) 3.4运算符 (17) 3.5标识名和变量的作用域 (19) 3.6类库 (19) 3.7数据类型 (20) 3.8赋值和条件运算符 (21) 3.9条件判断语句 (22) 3.10循环语句 (24) 3.11常与线程 (29) 3.12一个综合小练习 (30) 第四章一切都是对象 (31) 4.1两种思维方式 (31) 4.2对象 (32) 4.3封装 (33) 4.4继承 (34) 4.5多态36小跋37

自序 其它编程语言的学习都主要来自于书本,而Ruby的学习却是完全经由网络。我想,回报网络的最好方式就是在网络上还没有Ruby中文书籍的时候,编著一本Ruby中文入门教材。感谢编程语言发展史上的前辈们;感谢网络论坛上程序员们或是理智,或是激烈的讨论;感谢一切看到这本书的人。 曾经经受了SCJP的挖掘、挖掘、再挖掘(基于1.4,还没有Java5,Java6的许多特性),初遇Ruby,觉得十分亲切,仿佛童年时得到一个新奇的玩具。把玩之后,才发现玩具的塑料外壳里,藏着一把瑞士军刀。自此,模式、框架常常变得多余,很多时候可以更直接。好比在量子时代,星际航行只是一次时空转换而已,航天飞机静静地躺在博物馆里,那是旧时代科学的极致代表。 从物理课本中,我们感受到爱因斯坦的伟大,但对牛顿则怀以更加崇敬的心情。身体终将消逝,而你,我,他——我们的意识却将在网络中延续。旧时代文明的延续依赖于纸质书籍,书籍传递了理性之光。也许直觉才是这个宇宙本体的最初相用,直觉是一种天赋,我无从把握,但是理性,如此真切实在,她照亮了我,照亮了你,直到未来。 思,亘古如斯又倏忽闪现,谁的惊愕能深究它。 ——海德格尔 张开川 2006年12月31日

ruby文件操作

1ruby文件操作 关键字:file ruby 转! 1检测文件是否存在及其大小 FileTest的exist?方法可以检测一个文件是否存在: Ruby代码 1.flag=FileTest::exist?("LochNessMonster") 2.flag=FileTest::exists?("UFO") 3.#exists?is a synonym for exist? Ruby代码 1.flag=FileTest::exist?("LochNessMonster") 2.flag=FileTest::exists?("UFO") 3.#exists?is a synonym for exist? 如果我们想要知道文件是否有内容,可以使用File::Stat的zero?方法: Ruby代码 1.flag=File.new("somefile").stat.zero? Ruby代码 1.flag=File.new("somefile").stat.zero? 这个将会返回true,这是因为在ruby中0也是true,nil才是false. 所以我们可以使用size?方法: Ruby代码 1.if File.new("myfile").stat.size? 2.puts"The file has contents." 3.else 4.puts"The file is empty." 5.end

1.if File.new("myfile").stat.size? 2.puts"The file has contents." 3.else 4.puts"The file is empty." 5.end FileTest模块里面也有zero?和size?方法: Ruby代码 1.flag1=FileTest::zero?("file1") 2.flag2=FileTest::size?("file2") Ruby代码 1.flag1=FileTest::zero?("file1") 2.flag2=FileTest::size?("file2") 这里还有一个size方法: Ruby代码 1.size1=File.size("file1") 2.size2=File.stat("file2").size Ruby代码 1.size1=File.size("file1") 2.size2=File.stat("file2").size 2检测特殊文件属性 这边要注意,File类mix了FIleTest模块,并且FileTest模块和File::Stat 模块功能上也有很多重复. unix/linux有面向字符和面向块的设备。FileTest的方法blockdev?和chardev?可以进行测试:

Ruby中单元测试(Unit Test)方法

Ruby中单元测试(Unit Test)方法 Ruby中也提供了单元测试的框架,类似Java中的JUnit,此框架在Ruby中被成为mini test。 我们先看一个例子,这个是我的源代码: [code lang=”ruby”] require ‘json’ module PMU_INTERFACE class IUserLoginReq def initialize(command_id=nil, user_name=nil, user_password=nil, auth_code=nil, token=nil) @command_id = command_id @user_name = user_name @user_password = user_password @auth_code = auth_code @token = token end def to_json(*a) { "json_class" => self.class, "data" => self.to_json_hash }.to_json(*a) end def to_json_hash {:command_id => @command_id, :user_name => @user_name, :user_password => @user_password, :auth_code => @auth_code, :token => @token} end def self.json_create(json_str) data = json_str["data"] new(data["command_id"], data["user_name"], data["user_password"], data["auth_code"], data["token"]) end attr_accessor :command_id, :user_name, :user_password, :auth_code end class IUserLoginResp def initialize(result=nil, user_name=nil, user_password = nil) #the login result @result = result #the token holding by client @user_name = user_name @user_password = user_password end def to_json(*a) { "json_class" => self.class,

Ruby on Rails 之 Oracle 应用:简易教程

Ruby on Rails 之 Oracle 应用:简易教程 您可能听说过 Ruby on Rails,一个似乎正以狂风暴雨之势席卷 Web 开发社区(尤其是 JEE 和 PHP 的编程人员)的新应用框架。 Rails 是功能强大的 Web 应用平台,而且深受 JEE 和 PHP 的编程人员的喜爱。当您了解了 Rails 的优势后,您就会理解它为何对 J2EE 和 PHP 编程人员有如此的吸引力。首先,它使用任何自视甚高的设计模式专家都很钦佩的严格的模型-视图-控制器体系结构;这可以解释它为什么吸引了大量 JEE 开发人员。其次,使用 Rails 可以轻松地构建基本系统—这对 PHP 开发人员具有吸引力。 然而,从数据库的角度来说,Rails 还是有一些非常大的局限性。Rails 对您的数据库布局和应用程序需求做出了许多假定。例如,Rails 假定所有表都使用单一的非组合式主键。需通过Rails 插件支持组合式主键。此外,Rails 支持多数据库而且可以对其间事务进行协调;Rails 不支持两阶段提交。 本文章的目的不在于对 Rails 进行赞扬或批评,而只是对该技术的介绍。其中包含表扬也包含有批评。有时批评可能看起来过重了(尤其对于那些 Rails 的热爱者来说),但是请不要将 Rails 看得神乎其神。使用任何 Web 应用框架都是需要技巧的,无论是 JEE、https://www.360docs.net/doc/5b1083073.html, 还是 PHP。从长远来看,使用 Rails 可能比使用许多其他 Web 应用程序开发平台更高效,但是也需要假以时日来学习其中的技巧。 Ruby 是什么?Rails 是什么? Ruby 是一种动态编程语言,在很多方面和 Perl、Python 以及 Smalltalk 相似,但也有自己的特点。Java 和 PHP 编程人员似乎可以非常轻松地学会该语言,而且他们是 Ruby 的最忠实的拥护者。但是其他人也为该语言所吸引;这其中还包括著名的 Microsoft 王国中最资深的专家之一 Don Box。 Ruby 并不是新生事物;它创建于 1993 年,时间比 1995 年发布的 Java 或 PHP 都要久。当时 Ruby 语言虽已成熟,但不如某些其他语言受欢迎。因此,Ruby 编程语言的周边体系并不像 Java、PHP 或 Perl 那样丰富。因此,您能找到的有关该语言的框架、信息库、书籍、Web 站点、网志和其他资源也相对较少。 David Heinemeier Hanson 提出了 Rails 框架(Ruby 历史上最受欢迎的应用程序)后,Ruby 社区的软弱无力的市场表现近期发生了变化。Rails 将 Ruby 编程语言扩展为域特定的语言,特别适合 Web 开发。它还使用了另一种语言扩展ActiveRecord,使 Ruby 具有对象关系持久性。除了不支持组合主键和两阶段提

Anaconda介绍、安装及使用教程

Anaconda介绍、安装及使用教程 开源 安装过程简单 高性能使用Python和R语言 免费的社区支持 其特点的实现主要基于Anaconda拥有的: conda包 环境管理器 1,000+开源库 如果日常工作或学习并不必要使用1,000多个库,那么可以考虑安装Miniconda(图形界面下载及命令行安装请戳 3. Anaconda、conda、pip、virtualenv的区别 ① Anaconda Anaconda是一个包含180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。 ② conda conda是包及其依赖项和环境的管理工具。 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。 适用平台:Windows, macOS, Linux 快速安装、运行和升级包及其依赖项。 在计算机中便捷地创建、保存、加载和切换环境。 如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。——conda官方网站 conda为Python项目而创造,但可适用于上述的多种语言。 conda包和环境管理器包含于Anaconda的所有版本当中。 ③ pip pip是用于安装和管理软件包的包管理器。 pip编写语言:Python。 Python中默认安装的版本: Python 2.7.9及后续版本:默认安装,命令为pip Python 3.4及后续版本:默认安装,命令为pip3 “Pip installs Python”(“pip安装Python”) ④ virtualenv virtualenv:用于创建一个独立的Python环境的工具。 解决问题: 当一个程序需要使用Python 2.7版本,而另一个程序需要使用Python 3.6版本,如何同时使用这两个程序? 如果将所有程序都安装在系统下的默认路径,如:/usr/lib/python2.7/site-packages,当不小

Redmine安装配置

1.下载RubyInstaller1.8.7-p370。下载地址https://www.360docs.net/doc/5b1083073.html,/projects/rubyinstaller/ 2.下载rubygems1.8.24。下载地址https://www.360docs.net/doc/5b1083073.html,/projects/rubygems/ 3.下载redmine2.0.3。下载地址https://www.360docs.net/doc/5b1083073.html,/projects/redmine/ 4.安装RubyInstaller1.8.7-p370,安装目录不能有空格,如d:/ruby;另外将rubygems解压 到与ruby平级的目录rubygems-1.8.24,再将redmine也解压到与ruby平级的目录redmine-2.0.3。123 5. 6.进入dos界面,输入命令bundle install,效果如图所示: 7.解决以上错误参考http://rubyer.me/blog/134/,下载 DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe。下载地址https://www.360docs.net/doc/5b1083073.html,/downloads 8.运行,解压文件到(与ruby同级的目录)DevKit 9.在dos下切换到该目录,即cd DevKit,然后输入ruby dk.rb init,效果如下:

10.检查是否安装成功,输入命令gem install rdiscount --platform=ruby,效果如下: 11.接着切换到redmine目录再次执行bundle install --without development test rmagick,效 果如下:

ruby安装配置教程详解

Ruby On Rails安装配置详解(WINDOWS) Windows系统下开发环境的搭建 本文中将介绍如何在Windows操作系统下搭建RoR开发环境。 1.远程安装 a、步骤1:下载并安装Ruby一键安装包 下载最新的Ruby 1.8.4-16一键安装包,其下载地址为https://www.360docs.net/doc/5b1083073.html,/ projects/rubyinstaller/。 下载后运行该安装文件,显示界面如图2-1所示。 图1 安装程序运行界面 一直单击Next按钮默认安装即可。安装完成后打开命令行窗口,输入并运行命令ruby –v,安装成功会显示Ruby的版本号,如图2-2所示。 图2 Ruby的版本信息 接下来需要配置ClassPath,在环境变量中新增环境变量名"RUBY_HOME",变量值"D:\ruby",该值以本机Ruby安装目录为准。然后在path 加入"%BURY_HOME%\bin"。 测试Ruby是否安装成功 在命令行下运行ruby -v ,显示如下: ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] 如果不放心,再运行ruby -e 'puts "hello world"' ,显示如下: hello world 至此,Ruby的安装告一段落,接下安装Rails。

安装Rails之前需要按顺序安装以下模块: gem install activesupport gem install activerecord gem install actionpack gem install actionmailer gem install actionwebservice(简称aws) 最后才是rails b、步骤2:使用RubyGems安装Rails RubyGems是标准的Ruby包管理器,它的功能类似于Linux下的apt-get。使用RubyGems可以方便地从远程服务器下载并安装Rails。 打开命令行窗口,输入并执行命令gem install rails --remote或gem install rails-- include-dependencies,程序运行结果分别如图3和图4所示。 图3 命令执行过程中 图4 命令执行过程中 打开命令行窗口输入并运行rails –v,执行结果如图2-5所示。 图5 Rails的版本信息 显示的Rails版本为1.0.0,Rails安装成功,即RoR开发环境搭建成功。 注意使用gem install rails - -remote安装Rails,是直接从远程服务器下载Rails安装包文件;而使用gem install rails - -include-dependencies命令安装Rails,会首先在本地主机上寻找是否存在Rails 的安装包,如果没有则从远程服务器下载安装。 2.本地安装 a、步骤1:下载并安装Ruby一键安装包 具体步骤请参见“远程安装”部分。 b、步骤2:获取Rails安装插件包

Redmine安装配置

项目管理工具Redmine 安装试用手记 1.安装导向(官网) https://www.360docs.net/doc/5b1083073.html,/wiki/redmine/RedmineInstall 2.坏境配置 1)安装Ruby https://www.360docs.net/doc/5b1083073.html,/projects/rubyinstaller/ 这里是一键安装包,一路Next即可,比较适合像我这种菜鸟^_^ 【注意】安装中有一个选项,是说要把Ruby的命令行配置到坏境变量中,为了下面调用命令方便,建议选上O(∩_∩)O 2)安装ROR 运行安装命令:gem install rails -v=3.2.17 这是在线安装,比较慢,不过比较简单,亦然是小菜我的选择:) 3)下载SQLite https://www.360docs.net/doc/5b1083073.html,/download.html 这里使用SQLite3,下载解压后,把sqlite.exe拷贝到刚才Ruby安装目录的Bin目录下即可 4)下载Sqlite ruby驱动 https://www.360docs.net/doc/5b1083073.html,/projects/sqlite-ruby/ 下载最新支持Win的驱动sqlite3-ruby-1.2.3-mswin32.gem 运行安装命令:gem install sqlite3-ruby 5) 下载DevKit 1) Download Ruby 1.9.3-p0 2) Download DevKit file from https://www.360docs.net/doc/5b1083073.html,/progDownload/DevKit-Download-193050.html (DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe) 3) Extract DevKit to path C:\Ruby193\DevKit 4) cd C:\Ruby192\DevKit

二十分钟_教你Ruby快速入门(DOC)

二十分钟教你Ruby快速入门 介绍 这是一个短小的Ruby入门,完全读完只需20分钟。这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby官方网站进行下载并安装。 交互式的Ruby 打开IRB(交互式Ruby外壳): 如果你使用Mac OS X,那么请打开终端窗口输入irb; 如果你使用Linux,那么请打开shell输入irb; 如果你使用windows,那么请在开始菜单中找到Ruby->fxri,并执行它。 Ok,在打开IRB之后,在其中输入"Hello World"。 Ruby听从你的安排! 发生了什么?我们刚才编写了世界上最短小的“Hello World”程序吗?这么说不太确切。第二行输出是IRB告诉我们:上一个表达式的评估结果。如果我们希望打印出“Hello World”,那么就还需要一点努力:

puts在Ruby中是一个简单的打印输出命令。后面的“=> nil”表示什么?——那是表达式的结果。Puts总是返回nil,这是Ruby中表示“绝对无值”(absolutely-positively-nothing value)的方式,看上去有些类似Java中的null。 你的免费计算器在这里! 无需做什么,我们就能把IRB作为一个简单的计算器使用: 这样就能计算3+2。够简单的!那么3乘以2如何?你可以在下面继续输入3*2,也可以回到上面(3+2处)重新修改你刚刚输入的计算公式。使用键盘上的向上键,使光标到达3+2那一行,再用左键移动光标到加号上,然后使用空格键进行修改。 下面,让我们尝试计算3的平方: 在Ruby语言中,**表示幂运算。那么如何计算平方根呢? Ok,等一下,表达式中的sqrt(9)表示什么?你一定能猜到这是计算9的平方根。而Math表示什么?不要着急,下面就让我们进一步了解像Math这样的模块。 模块——按照主题分组的代码

Ruby on Rails环境的搭建

Ruby on Rails环境的搭建(基于Win XP) 一个RoR环境的搭建还算比较简单,但其中有几个小地方需要注意,也许会省你不少心思。 1. 先安装Ruby,现在的版本是1.8.5,可以从这儿下载,这是一个EXE文件,直接Next 下去就可以了,默认的安装路径是C:\ruby。安装完成之后,可以在命令行下面敲入ruby -v检测一下是否安装完成,如果出现“ruby 1.8.5……”的字样,表示OK; 2. 安装Rails,这一步比较有意思,是通过命令行(cmd)直接从网络上下载来进行的。如果你想一步到位,可以使用gem install rails --include -dependencies这行命令,但要等几分钟,因为是后台运行的;另外如果你想看看到底安装了哪些组件,可以直接用gem in stall rails,不过这需要你呆在电脑前不要动,因为你要敲入几个Y才能完成;仍然可以用Rails -v这个命令行查看是否安装成功,如果出现“Rails 1.1.6”,表示OK; 3. 下面知道要做什么了吧?下载RadRails。像Eclipse一样,直接下载下来解压缩,不用安装就可以用。点击这儿下载,根据网速可能需要五六分钟,我用的是Dudu加速器,还算比较快; 4. 对RadRails解压缩之后,点击里面的radrails“红帆船”,就会显示类似于Eclipse的界面了(注意要安装1.4.2以上的JDK或者JRE,因为Eclipse的运行需要一个Java环境); RadRails的参数配置 5. 下面是本篇文章最为重要的一个地方,也是我在开始使用RadRails时比较困扰我的一个地方,就是对它的配置,这里我也多用些笔墨介绍一下。其实主要是Interpreter Name、R uby、Rails及Rake等几个参数的配置。先说Interpreter,在RadRails环境里Window>Pr eferences>Ruby>Installed Interpreters,然后点击那个“Add”按钮,在Interpreter Name 里随便输入一个名字,比如Ruby,然后在Path选择Ruby路径下的“ruby.exe”文件,比如我现在就是“C:\ruby\bin\ruby.exe”;下面是Rails,在Window>Preferences>Rails>Configu ration,Rails path选择目录下的rails文件,特别注意不是rails.cmd,如果选择了这个文件,操作无效,这一点可能是很多人易犯的一个毛病;对Rake也是,在同一个地方,点开文件选择框后,选择rake的二进制文件,特别注意不是rake.bat也不是rake.cmd,如果选择了这两个文件,依然是无效,如果找了半天没有找到这个文件,说明你没有安装,可以用ge m update rake下载。 6. 好,下面让我保存好这些设置,在RadRails里面建立一个新文件。为简单起见,我们就直接在File>New下面的Rails里面点击Rails Project,建立一个名字为demo的项目,其它设置为默认。这时服务器及相关的基础代码RadRails已经帮你生成好了,在右下方的视图里有个名为“Servers”的,如果不出意外,在里面会出现一个名为“demoServer”的记录,

pycharm4.5安装教程

安装步骤: 1、右击软件安装包选择解压到“pycharm4.5.3”。 2、在解压文件夹中找到pycharm-professional-4.5.3,右击打开。 3、点击Next。 4、点击I Agree。 5、点击Browse更改安装路径,建议安装到除C盘以外的磁盘,可在D盘或者其它盘创建一个PyCharm 4.5.3文件夹。然后点击Next。

6、勾选Create Desktopshortcut,然后点击Next。 7、点击Install。 8、安装中(等待5分钟左右)。

9、点击Finish。 10、找到安装包解压后的pycharm4.5.3文件夹,右击打开。 11、找到lib文件夹,右击打开。 12、在解压文件夹中找到PyCharm4_zh_CH文件夹,右击打开。

13、在打开的文件夹中找到resources_cn.jar,并选中,右击复制。 14、打开安装文件夹pycharm4.5.3下的lib文件夹,选择空白处,右击粘贴。 15、在桌面找到JetBrainsPyCharm 4.0.4,右击打开。 16、在解压文件夹中找到keygen,右击以管理员身份运行。

17、点击Application后的RubyMine,选择PyCharm。 18、复制User or copayName处的内容将其粘贴到User Name,点击Generate,复制License Key处的内容,将其粘贴到License Key(4处)然后点击OK。 19、勾选I Accept allterm of the license,然后点击OK。 20、点击OK。

Ruby on Rails 之 Oracle 应用:简易教程

Ruby on Rails 之Oracle 应用:简易教程 您可能听说过 Ruby on Rails,一个似乎正以狂风暴雨之势席卷 Web 开发社区(尤其是 JEE 和 PHP 的编程人员)的新应用框架。 Rails 是功能强大的 Web 应用平台,而且深受 JEE 和 PHP 的编程人员的喜爱。当您了解了 Rails 的优势后,您就会理解它为何对 J2EE 和 PHP 编程人员有如此的吸引力。首先,它使用任何自视甚高的设计模式专家都很钦佩的严格的模型-视图- 控制器体系结构;这可以解释它为什么吸引了大量 JEE 开发人员。其次,使用 Rails 可以轻松地构建基本系统—这对 PHP 开发人员具有吸引力。 然而,从数据库的角度来说,Rails 还是有一些非常大的局限性。Rails 对您的数据库布局和应用程序需求做出了许多假定。例如,Rails 假定所有表都使用单一的非组合式主键。需通过Rails 插件支持组合式主键。此外,Rails 支持多数据库而且可以对其间事务进行协调;Rails 不支持两阶段提交。

本文章的目的不在于对 Rails 进行赞扬或批评,而只是对该技术的介绍。其中包含表扬也包含有批评。有时批评可能看起来过重了(尤其对于那些 Rails 的热爱者来说),但是请不要将 Rails 看得神乎其神。使用任何 Web 应用框架都是需要技巧的,无论是 JEE、https://www.360docs.net/doc/5b1083073.html, 还是 PHP。从长远来看,使用 Rails 可能比使用许多其他 Web 应用程序开发平台更高效,但是也需要假以时日来学习其中的技巧。 Ruby 是什么?Rails 是什么? Ruby 是一种动态编程语言,在很多方面和 Perl、Python 以及 Smalltalk 相似,但也有自己的特点。Java 和 PHP 编程人员似乎可以非常轻松地学会该语言,而且他们是 Ruby 的最忠实的拥护者。但是其他人也为该语言所吸引;这其中还包括著名的Microsoft 王国中最资深的专家之一 Don Box。 Ruby 并不是新生事物;它创建于 1993 年,时间比 1995 年发布的 Java 或 PHP 都要久。当时 Ruby 语言虽已成熟,但不如某些其他语言受欢迎。因此,Ruby 编程语言的周边体系并不像 Java、PHP 或 Perl 那样丰富。因此,您能找到的有关该语

Eclipse搭建Ruby开发环境

Eclipse搭建Ruby开发环境 下载Eclipse及插件: RDT(Ruby Development Tool) 目录结构如下: 将下载的RDT文件解压到C:\eclipse对应的features、plugins目录; Ruby及插件安装配置 下载RUBY及插件 ruby下载地址: https://www.360docs.net/doc/5b1083073.html,/frs/download.php/18566/ruby186-25.exe watir下载地址: https://www.360docs.net/doc/5b1083073.html,/frs/download.php/5677/watir-1.4.1.exe 1) 安装配置: (1)下载Ruby后,双击进行安装,安装过程中选择安装目录(例如: C:\ruby); (2)下载Watir后,双击进行安装,安装过程中选择安装目录(例如: C:\Program Files\Watir) 2) 配置Ruby解释器 (1)打开Eclipse主界面,右击“我的电脑”,点击“窗口”,选择“首选项”,进入对话框中“Ruby>Installed Interpreters”入口,如下: (2)点击“add”,在对话框中输入信息后,如下:

(3)点击“确定”,完成配置。 An internal error occurred during: "Launching Hello". Location of launching bundle does not contain @: reference:file:plugins\https://www.360docs.net/doc/5b1083073.html,unching_0.8.0.604272100PRD\ 1. 安装python与pyqt4,不用单独安装qt。python推荐安装 2.5.x版。如果系统之前已经有qt了,pyqt与qt的版本号前两位最好一样,比如pyqt4.4.2与qt4.4.1是关系不大的,但pyqt4.4.x与qt4. 3.x可能就会有问题。 Python下载地址: https://www.360docs.net/doc/5b1083073.html,/download/ pyqt下载地址:https://www.360docs.net/doc/5b1083073.html,/software/pyqt/download PS: pyqt自带的example相当赞,推荐看看。 2. eric下载解压后有个install.py,运行python install.py即可。在Windows下,要求QtCore4.dll所在的文件夹包含在环境变量PATH中,不然安装时会提示找不到QtCore4.dll。在PyQt安装时,默认会自动设定好环境变量。 安装完毕后,直接双击eric4.pyw或eric4.bat都可以运行Eric4。不同之处在于后者会打开一个DOS黑窗口,不会影响性能,最多影响心情。 3. 安装后第一次运行Eric4会提示进行配置。推荐把各配置项都看看,自动补全与智能感知的功能默认都没有打开,而且比较弱,导入.api文件后可以强化。打开功能并强化的方法:单击菜单Settings->Preferences后弹出对话框,选择左侧的Editor分支下的Autocompletion,全勾上,source选择"from Document and API files"。然后再在左侧选择Editor分支下的APIs,勾上复选框,语言选择Python,单击按钮Add from installed APIs,把你需要的.api文件都加进去,最后点击Compile APIs,要花几分钟,再点确定就OK。现在你的Autocomplete的功能就很牛了,虽然仍不完美。可以把自己的程序生成.api文件并添加。生成方法是在Project->Source Documentation->Generate API file. 4. 如果要用到QtDesigner(界面设计器),要改个脚本。打开PyQt4\bin\pyuic4.bat,会发现里面执行的是C:\Python2.5\python.exe,但我的python不是装在那,后面参数里的pyuic.py所在的路径也不对,改为正确的路径就OK。比如我的pyuic4.bat就是: @python "D:\Program Files\python2.5\Lib\site-packages\PyQt4\uic\pyuic.py" %1 %2 %3 %4 %5 %6 %7 %8 %9 已知bug: 1.有时会提示一些错误,一般是Eric4的代码疏忽了一些变量值为None的情况。点确定就行,不影响使用。 2.一些翻译错误,比如斜体翻译成了意大利体。 一些注意事项: 1.取消多行注释的快捷键Ctrl-Alt-M与千千静听的全局快捷键冲突,可以在Settings->Keyboard shortcuts中更改。 2.在工程中新建代码文件的办法:新建一个文本文件后写入代码,保存为.py文件,然后手动加入到工程中。很土?也许吧

相关文档
最新文档