2011年4月2日 星期六

-步驟--已解決- Ubuntu 10.04.1 桌機安裝 Ruby → RubyGems → Rails → RedCloth,另,產生 HTML 檔時,排除 uninitialized constant 錯誤訊息

這幾天在 Ubuntu 底下設定 Rails 中文指南翻譯所需的環境,鬼打牆了好幾天,終於成功了囧。把步驟記下來,以免日後又要重新摸索一次 ^^b

官網上的指令,都要記得前面多加上 sudo ,否則會權限不足。



安裝 Ruby

參考 http://www.ruby-lang.org/en/downloads/

sudo apt-get install ruby1.9.1-full

或者安裝 Ruby 1.8 版本
sudo apt-get install ruby-full

裝了 Ruby 才能裝 gem (廢話)。


安裝 RubyGems

參考 http://rubygems.org/pages/download

下載 TGZ 檔案,解壓縮。在解壓縮的資料夾底下打指令
sudo ruby setup.rb

裝了 gem 才能裝 Rails。


安裝 Rails

參考 https://help.ubuntu.com/community/RubyOnRails#Installing%20rails

sudo gem install rails

裝了 Rails 才能裝 RedCloth,不然會缺一堆套件。現在安裝 Rails 會自動裝上 3.0.5 版的。


安裝 RedCloth

參考 http://redcloth.org/

sudo gem install RedCloth

裝了 RedCloth 才能自動產生 HTML 檔案。RedCloth 很容易忘記 R 跟 C 要大寫。


利用 RedCloth 從 textile 檔案產生 HTML 檔案


Ubuntu 下的指令修正
做完上述安裝動作後,在 Rails 翻譯的專案資料夾中,依照 https://github.com/ihower/docrails/wiki 的指示,在 docrails/railties/guides 底下打 LOCALE=zh_tw ruby rails_guides.rb 的話,會出現錯誤訊息。

這是因為,Ubuntu 作業系統中,一定會有 LANGUAGE 語系設定,而不像 Mac 語系可能是空值。所以,原本的指令要改成:
LANGUAGE="" LOCALE=zh_tw ruby rails_guides.rb

應該要出現像這樣,成功產生 HTML 的訊息:
etblue@etblue-m7720-ubuntu-lucid64:~/docrails/railties/guides$ LANGUAGE="" LOCALE=zh_tw ruby rails_guides.rb
Generating getting_started.html
Generating index.html
Generating active_record_validations_callbacks.html
Generating migrations.html
Generating layout.html

如果沒有新更動的檔案可以產生 HTML,則不會有任何動作。

缺少 "thread" 的 .rb 檔案修正
但是,我輸入指令後,卻看到錯誤訊息:
etblue@etblue-m7720-ubuntu-lucid64:~/ihower/docrails/railties/guides$ LANGUAGE="" LOCALE=zh_tw ruby rails_guides.rb
Generating getting_started.html
./../../actionpack/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb:94:
uninitialized constant
ActionView::Helpers::AssetTagHelper::AssetPaths::Mutex (NameError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in
`gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from ./../../actionpack/lib/action_view/helpers/asset_tag_helper.rb:3
from ./../../actionpack/lib/action_view/helpers.rb:38
from ./../../actionpack/lib/action_view/base.rb:158
from ./rails_guides/generator.rb:142:in `generate_guide'
from ./rails_guides/generator.rb:141:in `open'
from ./rails_guides/generator.rb:141:in `generate_guide'
from ./rails_guides/generator.rb:109:in `generate_guides'
from ./rails_guides/generator.rb:107:in `each'
from ./rails_guides/generator.rb:107:in `generate_guides'
from ./rails_guides/generator.rb:84:in `generate'
from rails_guides.rb:50

然後,產生出一個完全空白、沒有任何內容的 getting_started.html 檔案。

Google 後看到,RubyGems 1.6.0 跟 Rails < v3 的組合會產生類似這樣 ooxxooxx... Mutex(NameError) 的問題,不過我的 gem 跟 Rails 看起來都是剛裝好的新版。

$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
$ gem -v
1.6.2
$ rails -v
Rails 3.0.5

根據錯誤訊息,我把 docrails/actionpack/lib/action_view/helpers/asset_tag_helpers.rb 檔案打開來,看到這樣:
require 'action_view/helpers/asset_tag_helpers/javascript_tag_helpers'
require 'action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers'
require 'action_view/helpers/asset_tag_helpers/asset_paths'
...

在檔案的開頭,插入這一行:
require 'thread'
存檔後,一切就可以正常運作。

結論就是, gem 1.6.2 + Rails 3.0.5 的組合,有時候還是需要在 .rb 檔案中 require 'thread' 。