另外,還要在environment.rb的最后插入以下代碼:
在日志里顯示如下,表面上看好象是路由配置的問題
ActionController::RoutingError (no route found to match "/fckblank.html" with {:method=>:get}):
/var/lib/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/routing.rb:1292:in `recognize_path'
/var/lib/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/routing.rb:1282:in `recognize'
/var/lib/gems/1.8/gems/rails-1.2.3/lib/dispatcher.rb:40:in `dispatch'
/var/lib/gems/1.8/gems/rails-1.2.3/lib/webrick_server.rb:113:in `handle_dispatch'
/var/lib/gems/1.8/gems/rails-1.2.3/lib/webrick_server.rb:79:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
解決方法 :
修改:vendor/plugins/fckeditor/app/controller/fckeditor_controller.rb
將原來的
在linux下生成圖片需要圖片處理軟件ImageMagick的Ruby語言RMagick庫支持。安裝RMagick最麻煩,我查了N多資料試了N次才安裝成功。
1. 安裝ImageMagick:sudo apt-get install imagemagick
2. 查看安裝結果:dpkg -l | grep magick
3. 更新軟件包列表:sudo apt-get update
4. 安裝圖片處理軟件包libmagick9-dev:sudo apt-get install libmagick9-dev ruby1.8-dev
5. 安裝接口軟件包RMagick:sudo gem install rmagick
6. 說明:如果出現問題或者錯誤請執行下面命令:sudo apt-get remove --purge libmagick9-dev
在irb里require 'RMagick'。如果返回true,表示安裝成功。
我學習REST的途徑如下:
1、學習REST,下面這一篇翻譯自<<RESTful Rails Development>>文檔基本就夠了。感謝yananay的辛苦翻譯,翻譯得相當流暢。
http://www.javaeye.com/topic/89133
2、其次是看別人是怎么用REST的,大家一致推薦beast網站,具體的內容在這個貼子上
http://www.javaeye.com/topic/39355
3、另外再附一篇Rails創始人DHH的演講翻譯稿,這讓我們能大概搞清楚REST是什么,它的初衷是什么:http://blog.csdn.net/myan/archive/2006/11/25/1413933.aspx
看完<RESTful Rails Development>就可以開始對自己的網站重構了,有不懂的地方再參考一下別人beast是怎么實現的。
sudo apt-get install mysql-server mysql-client
root原密碼為空,給它加個密碼
mysqladmin -uroot -password 123456
導入SQL腳本
mysql -uroot -p123456 < db/create_table.sql
重啟動mysql服務
mysqladmin
-uroot -p123456 shutdown
sudo mysqld&
中文亂碼的解決
修改mysql配置文件
sudo
vim /etc/mysql/my.cnf
增加紅色一句
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
default-character-set = utf8
skip-external-locking
現象:在用命令行導入建表與插入數據的腳本后,所得數據還是亂碼。但在RadRails中用insert插入數據卻中文顯示正常,看來是mysql命令行客戶端的原因。在SQL腳本頭加上如下一句,可以讓mysql命令行客戶端識別編碼,正常導入中文。
SET NAMES 'utf8';
錯誤現象:
。用MySQL Query Browser查看MySQL數據,中文顯示正常。
。頁面顯示為亂碼,原來是中文的地方都變成了一個長方塊
。手工調整瀏覽器的頁面編碼,可以使用頁面正常顯示。但刷新后又是亂碼。
解決方法:修改config/database.yml,加入一句編碼設置如下。
這時從數據庫讀取的數據顯示正常了,但*.rhtml里的原中文卻顯示變成了亂碼。據說將*.rhtml用記事本重新保存為utf-8格式可以解決,而我是用Radrails,右擊項目,在它的屬性頁的info項的text file encoding改為UTF-8。這時*.rhtml文件里的中文會變成亂碼,所以最好備份一下,然后將備份的文件內容一個個的復制粘貼過來。致此終于完美解決了中文亂碼問題。
注:
1。有些文章說要修改application.rb,在before_filter加入字符過濾代碼。我以前也試過,可行。但我覺得還是修改database.yml來得簡單一些。
3。還有的人說修改environment.rb加入兩行 $KCODE = 'u' 和 require 'jcode' 。這里似乎沒有必要。也許這是老版Rails的解決方法。
4。有的人說在建表的時候不能用InnoDB,但我的建表語句如下,是用InnoDB。沒有發現問題。
。<%= stylesheet_link_tag "scaffold", "depot", :media => "all" %>生成指向scaffold.css、depot.css兩個式樣表的<link>標簽
。@page_title 各個頁面標題變量
。@flash[:notice] 提示性的信息(key=notice),這是一個公共變量。
。<%= @content_for_layout %> 位置嵌入顯示控制器內名網頁。由于其他網頁變成了模板的一部份,所以其<html>等標簽應該去掉。
store_controller.rb ,當從session里取出某購物車不存在,則新建一個,并存入session。最后把此購物車賦給變量cart。
ruby script/generate model LineItem,創建一個LineItem的數據模型,附帶還會創建相應的測試程序。
store_controller.rb:
。params是URL的參數數組
。redirect_to轉向語句
。rescue 異常,相當于Java的Exception
。redirect_to_index是application.rb中的一個方法,這個文件里的方法是各控制器公開的。
。logger是rails內置的變量。
class Cart
attr_reader :items
attr_reader :total_price
def initialize
empty!
end
def add_product(product)
item = @items.find {|i| i.product_id == product.id}
if item
item.quantity += 1
else
item = LineItem.for_product(product)
class Cart
# An array of LineItem objects
attr_reader :items
# The total price of everything added to this cart
attr_reader :total_price
# Create a new shopping cart. Delegates this work to #empty!
def initialize
empty!
end
# Add a product to our list of items. If an item already
# exists for that product, increase the quantity
# for that item rather than adding a new item.
def add_product(product)
item = @items.find {|i| i.product_id == product.id}
if item
item.quantity += 1
else
item = LineItem.for_product(product)
@items << item
end
@total_price += product.price
end
# Empty the cart by resetting the list of items
# and zeroing the current total price.
def empty!
@items = []
@total_price = 0.0
end
end
end
@total_price += product.price
end
def empty!
@items = []
@total_price = 0.0
end
end
。由于Cart沒有對應的數據表,它只是一個普通的數據類,因此要定義相應的屬性。
。@items << item 把對象item加入到@items數組
。@items=[] 空數組
如果出現SessionRestoreError錯誤,則檢查application.rb是否做了如下的模型聲明。因為對于動態語句,session把序列化的類取出時,否則是無法知道對象類型的,除非聲明一下。
<% ... -%> -%>相當于一個換行符
@items.find(|i| i.product_id == product.id) |i|的作用應該相當于@items數組中的一個元素(書上沒有提到,要查一下ruby語法)。
if @items.empty? 判斷數組是否為空數組
flash[:notice] flash可以在同一個Session的下一個請求中使用,隨后這些內容就會被自動刪除(下一個的下一個就被清空了??)。
實例變量是代替不了flash的,因為IE無狀態的特性,在下一個請求中,上一個請求的實例變量已失效。
當異常沒有被任何程序捕捉,最后總會轉到ApplicationController的rescue_action_in_public()方法
各視圖可以使用appp/helpers目錄下的各自相應的輔助程序中提供的方法。
創建視圖:views\homepage\index.rhtml,顯示出title表所有記錄的id和name值
視圖中用到的@titles變量來自于我們自己創建的如下控制器: app\controllers\homepage_controller.rb。Rails中控制器中的變量可以在視圖中使用(這是否會產生變量污染的問題呢,還待以后再體驗)
最后啟動Web服務器后訪問:http://localhost:3000/homepage