另外,還要在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庫(kù)支持。安裝RMagick最麻煩,我查了N多資料試了N次才安裝成功。
1. 安裝ImageMagick:sudo apt-get install imagemagick
2. 查看安裝結(jié)果: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. 說明:如果出現(xiàn)問題或者錯(cuò)誤請(qǐng)執(zhí)行下面命令:sudo apt-get remove --purge libmagick9-dev
在irb里require 'RMagick'。如果返回true,表示安裝成功。
我學(xué)習(xí)REST的途徑如下:
1、學(xué)習(xí)REST,下面這一篇翻譯自<<RESTful Rails Development>>文檔基本就夠了。感謝yananay的辛苦翻譯,翻譯得相當(dāng)流暢。
http://www.javaeye.com/topic/89133
2、其次是看別人是怎么用REST的,大家一致推薦beast網(wǎng)站,具體的內(nèi)容在這個(gè)貼子上
http://www.javaeye.com/topic/39355
3、另外再附一篇Rails創(chuàng)始人DHH的演講翻譯稿,這讓我們能大概搞清楚REST是什么,它的初衷是什么:http://blog.csdn.net/myan/archive/2006/11/25/1413933.aspx
看完<RESTful Rails Development>就可以開始對(duì)自己的網(wǎng)站重構(gòu)了,有不懂的地方再參考一下別人beast是怎么實(shí)現(xiàn)的。
sudo apt-get install mysql-server mysql-client
root原密碼為空,給它加個(gè)密碼
mysqladmin -uroot -password 123456
導(dǎo)入SQL腳本
mysql -uroot -p123456 < db/create_table.sql
重啟動(dòng)mysql服務(wù)
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
現(xiàn)象:在用命令行導(dǎo)入建表與插入數(shù)據(jù)的腳本后,所得數(shù)據(jù)還是亂碼。但在RadRails中用insert插入數(shù)據(jù)卻中文顯示正常,看來是mysql命令行客戶端的原因。在SQL腳本頭加上如下一句,可以讓mysql命令行客戶端識(shí)別編碼,正常導(dǎo)入中文。
SET NAMES 'utf8';
錯(cuò)誤現(xiàn)象:
。用MySQL Query Browser查看MySQL數(shù)據(jù),中文顯示正常。
。頁面顯示為亂碼,原來是中文的地方都變成了一個(gè)長(zhǎng)方塊
。手工調(diào)整瀏覽器的頁面編碼,可以使用頁面正常顯示。但刷新后又是亂碼。
解決方法:修改config/database.yml,加入一句編碼設(shè)置如下。
這時(shí)從數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)顯示正常了,但*.rhtml里的原中文卻顯示變成了亂碼。據(jù)說將*.rhtml用記事本重新保存為utf-8格式可以解決,而我是用Radrails,右擊項(xiàng)目,在它的屬性頁的info項(xiàng)的text file encoding改為UTF-8。這時(shí)*.rhtml文件里的中文會(huì)變成亂碼,所以最好備份一下,然后將備份的文件內(nèi)容一個(gè)個(gè)的復(fù)制粘貼過來。致此終于完美解決了中文亂碼問題。
注:
1。有些文章說要修改application.rb,在before_filter加入字符過濾代碼。我以前也試過,可行。但我覺得還是修改database.yml來得簡(jiǎn)單一些。
3。還有的人說修改environment.rb加入兩行 $KCODE = 'u' 和 require 'jcode' 。這里似乎沒有必要。也許這是老版Rails的解決方法。
4。有的人說在建表的時(shí)候不能用InnoDB,但我的建表語句如下,是用InnoDB。沒有發(fā)現(xiàn)問題。
。<%= stylesheet_link_tag "scaffold", "depot", :media => "all" %>生成指向scaffold.css、depot.css兩個(gè)式樣表的<link>標(biāo)簽
。@page_title 各個(gè)頁面標(biāo)題變量
。@flash[:notice] 提示性的信息(key=notice),這是一個(gè)公共變量。
。<%= @content_for_layout %> 位置嵌入顯示控制器內(nèi)名網(wǎng)頁。由于其他網(wǎng)頁變成了模板的一部份,所以其<html>等標(biāo)簽應(yīng)該去掉。
store_controller.rb ,當(dāng)從session里取出某購(gòu)物車不存在,則新建一個(gè),并存入session。最后把此購(gòu)物車賦給變量cart。
ruby script/generate model LineItem,創(chuàng)建一個(gè)LineItem的數(shù)據(jù)模型,附帶還會(huì)創(chuàng)建相應(yīng)的測(cè)試程序。
store_controller.rb:
。params是URL的參數(shù)數(shù)組
。redirect_to轉(zhuǎn)向語句
。rescue 異常,相當(dāng)于Java的Exception
。redirect_to_index是application.rb中的一個(gè)方法,這個(gè)文件里的方法是各控制器公開的。
。logger是rails內(nèi)置的變量。
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沒有對(duì)應(yīng)的數(shù)據(jù)表,它只是一個(gè)普通的數(shù)據(jù)類,因此要定義相應(yīng)的屬性。
。@items << item 把對(duì)象item加入到@items數(shù)組
。@items=[] 空數(shù)組
如果出現(xiàn)SessionRestoreError錯(cuò)誤,則檢查application.rb是否做了如下的模型聲明。因?yàn)閷?duì)于動(dòng)態(tài)語句,session把序列化的類取出時(shí),否則是無法知道對(duì)象類型的,除非聲明一下。
<% ... -%> -%>相當(dāng)于一個(gè)換行符
@items.find(|i| i.product_id == product.id) |i|的作用應(yīng)該相當(dāng)于@items數(shù)組中的一個(gè)元素(書上沒有提到,要查一下ruby語法)。
if @items.empty? 判斷數(shù)組是否為空數(shù)組
flash[:notice] flash可以在同一個(gè)Session的下一個(gè)請(qǐng)求中使用,隨后這些內(nèi)容就會(huì)被自動(dòng)刪除(下一個(gè)的下一個(gè)就被清空了??)。
實(shí)例變量是代替不了flash的,因?yàn)镮E無狀態(tài)的特性,在下一個(gè)請(qǐng)求中,上一個(gè)請(qǐng)求的實(shí)例變量已失效。
當(dāng)異常沒有被任何程序捕捉,最后總會(huì)轉(zhuǎn)到ApplicationController的rescue_action_in_public()方法
各視圖可以使用appp/helpers目錄下的各自相應(yīng)的輔助程序中提供的方法。
創(chuàng)建視圖:views\homepage\index.rhtml,顯示出title表所有記錄的id和name值
視圖中用到的@titles變量來自于我們自己創(chuàng)建的如下控制器: app\controllers\homepage_controller.rb。Rails中控制器中的變量可以在視圖中使用(這是否會(huì)產(chǎn)生變量污染的問題呢,還待以后再體驗(yàn))
最后啟動(dòng)Web服務(wù)器后訪問:http://localhost:3000/homepage