顯示具有 beast 標籤的文章。 顯示所有文章
顯示具有 beast 標籤的文章。 顯示所有文章

12/26/2007

Beast 在 Rails 2.0.2 不能啟動的解決方式

昨天 安裝Beast Trunk ,發現在最後 rake db:schema:load 遇到
rake aborted!
undefined method `whiny_protected_attributes=' for ActiveRecord::Base:Class
這樣的 error。根據網路上的回答,應該是 Rails 2.0.2 搞得鬼,解決方式根據這個網頁講的,在 config/enviroment.rb 裡面將這行 comment 起來即可
#config.active_record.whiny_protected_attributes = false
話說,beast 已經 800 多行了,乾脆改成千行以下的 forum 好了 :p

Ps.
Beast 安裝方式
1. 下載下來 beast trunk code
svn checkout http://svn.techno-weenie.net/projects/beast/trunk beast
2. cp config/database.example.yml config/database.yml 並且修改他
3. 建立 schema
rake db:schema:load
4. 修改 config/environment.rb. 裡面的 PASSWORD_SALT
5. 安裝額外的 Gem 像是 RedCloth 或是 ruby-openid

8/14/2007

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
sudo nano /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/06/how-to-use-gmail-smtp-server-to-send.html

nano 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
}
===========================

nano app/models/user_mailer.rb
===============================
@from = 'YOUR_GMAIL_ACCOUNT@gmail.com'
===============================
我不是很確定這一步要不要做,我猜不做會被 gamil 擋掉。

接下來把那段程式碼 copy 到可以被 require 的地方,我是放在 lib 下:
nano lib/smtp_tls.rb
接著把他 require 進去:
nano config/environment.rb
===========================
require 'smtp_tls'
===========================

sudo mongrel_rails cluster::restart
註冊一下試試寄信吧!如果失敗的話,那篇連結裡有個 workaround:

nano lib/smtp_tls.rb
=====================
rescue EOFError
  ;
rescue OpenSSL::SSL::SSLError => e
  puts('Unexpected Exception: ' + e.message + ' : ' +
    e.backtrace.join("\n") )
end
=====================

我之前用是沒有這個問題,但在這台 fedora 上卻有這個問題,
也許是要更新 openssl 的版本?不管如何,加入上面那段暫時可用。

結論:
還是 macports 好用,速度快,更新快,只是 build 要很久就是了。

5/04/2007

Beast 中文化成功


介紹完怎麼安裝 Beast ,我們廢話不多說,直接進入 Beast 中文化。Beast 的 I18N 是採用 GETTEXT 來做的,意思就是只要寫一個 po 檔即可處理大部份的中文化東西。不過還是有很多小地方沒有中文化,依舊需要一一 check。右圖就是成品,這裡就是 po檔下載點。實做方式以及po檔均參考 JavaEye 的 Suninny 先生撰寫的 [分享]Beast中文Gettext PO档,感謝他的付出。


中文化方式如下
  1. 採用之前說好的方式安裝 beast。
  2. 安裝 GETTEXT GEM
    gem i gettext
  3. 撰寫轉換rake file,新增一個檔案叫做 lib/tasks/gettext.rake,內容是
    desc "Create mo-files for L10n"
    task :makemo do
    require 'gettext/utils'
    GetText.create_mofiles(true, "po", "locale")
    end
  4. 新增一個資料夾 po/zh_tw/ ,將這個po檔放入這個資料夾裡面
  5. 產生相對應的 mo 檔,請打入
    rake makemo
  6. config/enviroment.rb 裡面,下面這一段 gettext 的部份要註解起來,我也不確定為什麼,反正會產生 error
    begin
    require 'gettext/rails'
    GetText.locale = "zh" # Change this to your preference language
    puts "GetText found!"
    rescue MissingSourceFile, LoadError
    puts "GetText not found. Using English."
    class ActionView::Base
    def _(s)
    s
    end
    end
    end
  7. app/controllers/application.rb 部份加上
    class ApplicationController < ActionController::Base
    #init_gettext "beast" if Object.const_defined?(:GetText)
    require 'gettext/rails'
    init_gettext "beast" if Object.const_defined?(:GetText)
    GetText.locale = 'zh_tw'
    end

    裡面 zh_tw 就是你指定的語系
  8. 重起 server 即可
如此就沒問題了。Beast I18N 做的不錯,唯一缺點就是 doc 太少,花了點時間才找到相關資料。

4/30/2007

Beast :最符合 Lighty 想法的討論區

當我一開始看到 Beast 的時候,我總覺得這是一個奇怪的東西, Beast 只是一個簡單到不能再簡單的「討論區」,而且真的沒別的了。可是當我開始真正花時間在 survey 他的時候,我發現到這真的是一個把精簡 code 的精神發揮到極限的東西,裡面的 code 相當的精彩。

我們來看看他的內容,截至目前的 trunk 為止,Controller 504行,Helper 94行,Model 238 行,Library 69行,如果不算 Unit test 一共 905行。一千行以下的討論區,到底能有什麼功能呢?

  1. 簡單易用的討論區:因為他就是討論區,所以一切的功能就是討論區,不過使用起來感覺蠻好用的。也支援一些文字格式化。
  2. REST Web API:他是目前 REST 化最徹底的 Rails 套件之一,也延續了 Rails 1.2 REST 最棒的特色,「當你完成一個內部功能的同時,你也順便寫完了 REST Web API」。
  3. OpenID Support:ㄜ,你沒看錯,他有 Open ID Support 。
  4. GetTEXT Support:所以 i18n 解決了。Btw,在我讀 Beast code 的同時,我也差不多把 po 檔寫完了,明後天就可以 release 出來。
  5. 沒有做任何縮圖上傳的機制:沒錯,你沒看錯。 Beast 是直接使用 gravatar 的縮圖,所以如果你沒有 gravatar 的帳號,就註冊一個吧。這樣的作法雖然奇怪,但是相當的合乎 MarshUP 的想法
仔細觀察 Beast 的設計哲學,可以說是「討論區該有的功能,Beast 一行都不少,除了最重要的功能之外,Beast一行 code 都不多」。不管是自己使用 Beast ,或是看 Beast 裡面的 code , Beast 都是相當好的選擇。

介紹了Beast,當然簡單講一下怎麼安裝。

下載 beast
這裡使用 svn 來安裝
svn checkout http://svn.techno-weenie.net/projects/beast/trunk
安裝 Edge Rails
在剛剛下載下來的svn目錄下,打入
rake freeze_edge
安裝 RedCloth
gem install RedCloth
修改 config
修改 dayabase.yml 的 production 設定

將 db schema 設定到 db 裡面
rake db:schema:load RAILS_ENV=production
如此,啟動您的 Rails App 即可。