Fedora Core 6 上安裝 beast
我選擇 apache2.2 + mongrel_cluster + postgresql
安裝 apache 和其他的東西。
sudo yum install httpd
sudo yum install httpd-devel
sudo yum install openssl
sudo yum install readline
安裝 ruby
sudo yum install ruby
sudo yum install ruby-devel
sudo yum install ruby-libs
sudo yum install rdoc
sudo yum install irb
安裝 postgresql
sudo yum install postgresql
sudo yum install postgresql-devel
sudo yum install postgresql-libs
sudo yum install postgresql-server
初始化 postgres
sudo mkdir -p /var/db/postgresql81/defaultdb
sudo chown postgres:postgres /var/db/postgresql81/defaultdb
sudo -u postgres initdb -D /var/db/postgresql81/defaultdb
sudo -u postgres pg_ctl -D /var/db/postgresql81/defaultdb \
-l /var/db/postgresql81/defaultdb/postgres.log start
拿來抓 beast... 捨 svn 取 svk 因為我討厭一堆 .svn
sudo yum install perl-SVK
sudo yum install rubygems
至少要用這些 gem
sudo gem install rails -y
sudo gem install mongrel_cluster -y
sudo gem install redcloth -y
sudo gem install ruby-openid -y
sudo gem install ruby-postgres -y
建立目錄。
mkdir -p ~/projects/beast
cd ~/projects/beast
用 svk 抓不會有一堆 .svn 礙眼。
svk mirror //mirror/beast \
http://svn.techno-weenie.net/projects/beast/branches/stable-1.0/
svk sync -s HEAD //mirror/beast
cd stable-1.0
產生讓 beast 用的資料庫。
sudo -u postgres createdb beast_prod
設定資料庫設定檔。
cp config/database.example.yml config/database.yml
nano config/database.yml
=========================
production:
database: beast_prod
adapter: postgresql
host: localhost
username: postgres
password:
=========================
初始化 beast 資料庫。
rake db:schema:load RAILS_ENV=production
非常囉唆的 cluster 設定,user 可以開 mongrel,
不過因為我懶所以用自己的帳號跑。
sudo mongrel_rails cluster::configure -e production \
-p 2000 -N 3 -c /home/YOUR_NAME/projects/beast/stable-1.0 \
-a 127.0.0.1 --user YOUR_NAME --group YOUR_NAME
啟動 mongrel_cluster 吧。
sudo mongrel_rails cluster::start
接著是 apache2.2 的 mod_proxy_balancer 的設定,
如果 mod_proxy_balancer 沒有啟動記得把他打開。
建立 balancer 導向 port 2000~2002
编辑 /etc/httpd/conf/httpd.conf
复制内容到剪贴板
代码:
<Proxy balancer://YOUR_BALANCER>
BalancerMember http://YOUR_ADDRESS:2000
BalancerMember http://YOUR_ADDRESS:2001
BalancerMember http://YOUR_ADDRESS:2002
</Proxy>
Listen 80
<VirtualHost *:80>
ServerAdmin YOUR_EMAIL
ServerName YOUR_ADDRESS
ProxyPass / balancer://YOUR_BALANCER/
ProxyPassReverse / balancer://YOUR_BALANCER/
ProxyPreserveHost on
ErrorLog /home/YOUR_NAME/projects/beast/stable-1.0/log/apache_error.log
CustomLog /home/YOUR_NAME/projects/beast/stable-1.0/log/apache_access.log combined
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
Alias /images /home/YOUR_NAME/projects/beast/stable-1.0/public/images
Alias /stylesheets /home/YOUR_NAME/projects/beast/stable-1.0/public/stylesheets
Alias /javascripts /home/YOUR_NAME/projects/beast/stable-1.0/public/javascripts
</VirtualHost>接著啟動 apache 就 ok 了。
sudo apachectl start
最後來設定 beast 的 smtp, 如果想用 gmail 寄信的話,
我之前試過兩個方式,一個是使用 msmtp,
另一個是有人有寫一小段 ssl smtp 的 patch, 可以參考這裡:
http://www.stephenchu.com/2006/0 ... server-to-send.html
编辑 config/environment.rb
加入:
复制内容到剪贴板
代码:
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'YOUR_DOMAIN',
:user_name => "YOUR_GMAIL_ACCOUNT",
:password => 'YOUR_GMAIL_PASSWORD',
:authentication => :plain
}编辑 app/models/user_mailer.rb
复制内容到剪贴板
代码:
@from = 'YOUR_GMAIL_ACCOUNT@gmail.com'我不是很確定這一步要不要做,我猜不做會被 gamil 擋掉。
接下來把那段程式碼 copy 到可以被 require 的地方,我是放在 lib 下:
lib/smtp_tls.rb
复制内容到剪贴板
代码:
require "openssl"
require "net/smtp"
Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, 'SMTP session already started' if @started
check_auth_args user, secret, authtype if user or secret
sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
@socket = Net::InternetMessageIO.new(sock)
@socket.read_timeout = 60 #@read_timeout
@socket.debug_output = STDERR #@debug_output
check_response(critical { recv_response() })
do_helo(helodomain)
raise 'openssl library not installed' unless defined?(OpenSSL)
starttls
ssl = OpenSSL::SSL::SSLSocket.new(sock)
ssl.sync_close = true
ssl.connect
@socket = Net::InternetMessageIO.new(ssl)
@socket.read_timeout = 60 #@read_timeout
@socket.debug_output = STDERR #@debug_output
do_helo(helodomain)
authenticate user, secret, authtype if user
@started = true
ensure
unless @started
# authentication failed, cancel connection.
@socket.close if not @started and @socket and not @socket.closed?
@socket = nil
end
end
def do_helo(helodomain)
begin
if @esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if @esmtp
@esmtp = false
@error_occured = false
retry
end
raise
end
end
def starttls
getok('STARTTLS')
end
end接著把他 require 進去:
编辑config/environment.rb
复制内容到剪贴板
代码:
require 'smtp_tls'参照:
http://d.hatena.ne.jp/zorio/20060416
http://d.hatena.ne.jp/zorio/20060417
http://www.puni.net/~mimori/rfc/rfc2821b.txt