Using Source Package架設redmine做專案管理Step By Step with Ubuntu 13.04

本篇原創分享如何Setep By Step在uBuntu使用source package的方式安裝Redmine 2.3.2。
因為redmine 2.3.2在uBuntu下並沒有提供apt的安裝方式,才會迫使要用純手工打造。 以下說明確定100%安裝成功。若有網友在操作過程中有任何的問題,請不吝發問討論。

若有要引用請註明出處

文章內容

安裝LAMP及設定權限 [setup_lamp]

安裝tasksel並安裝LAMP

$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server  

設定Apache目錄權限

//將網站管理者的帳號加入www-data群組
$ sudo usermod -a -G www-data user-account
//將/var/www改為www-data群組
$ sudo chown -R username:www-data /var/www
///var/www下的權限設為775
$ sudo chmod -R 775 /var/www
//只要在此目錄下所新增的檔案或目錄,擁有者都是www-data
$ sudo chmod -R g+s /var/www  

安裝RVM,Ruby和Rails [setup_rvm_ruby_rails]

參考這一篇安裝RVM和Ruby,Click Here

安裝rvm所需uBuntu套件

輸入以下指令安裝套件

$ sudo apt-get install build-essential curl  

下載並安裝rvm

$ curl -L https://get.rvm.io | sudo bash -s stable  

rvm安裝後的目錄位置為/usr/local/rvm,以下所有的動作也會安裝在此目錄下。

安裝完成後要做3件事。

  • 修改使用者權限可以執行rvm。將使用者加入rvm群組,使之可以執行rvm相關指令。 $ sudo usermod -a -G rvm user-account
  • 如果是虛擬機要改這一項。記得要將uBuntu的terminal的設定改好,參考Integrating RVM with gnome-terminal 。但做了這個設定後,原本的bash shell的設定會跑掉。
  • 登出後再登入。 如果是實體Linux,要重開機。
    如果是虛擬機,執行完後要登出再登入讓設定生效。

確認rvm版本

$ rvm -v
$ rvm 1.22.3 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]  

接下來用rvm來安裝ruby在uBuntu下需要安裝的相關套件(執行完成後會要求需入目前使用者的密碼並開始安裝套件)

$ rvm requirements  

安裝完成後吐出以下log,顯示安裝了哪些相依套件

Installing required packages: gawk, libreadline6-dev, zlib1g-dev, libssl-dev, libyaml-dev, libsqlite3-dev, sqlite3, autoconf, libgdbm-dev, libncurses5-dev, automake, libtool, bison, pkg-config, libffi-dev.  

查看ruby可安裝的版本資訊。正常的話,會出現訊息要求輸使用者密碼。執行需要花一些時間,請耐心等待。如果結果有顯示錯誤,可以試著登出再登入。

$ rvm list known  

使用rvm安裝ruby 1.9.3,實際安裝目錄為/usr/loca/rvm/rubies

$ rvm install 1.9.3  

設定預設的ruby版本

$ rvm use 1.9.3 --default

再度檢查ruby及gem的版本,得到版本號為

$ ruby -v
$ ruby 1.9.3p448 (2013-06-27 revision 41675) [i686-linux]
$ gem -v
$ 1.8.25  

更新Rubygems為搭配ruby–1.9.3使用的版本

$ rvm rubygems current
$ gem -v
$ 2.0.7   

接下來安裝rails及確認安裝後的版本,不安裝文件檔(安裝時間有點久,千萬要耐心等待)。會被安裝在/usr/local/rvm/gems/ruby-1.9.3-p448/gems/rails-4.0.0目錄下。相關的套件連同rails會被安裝28個。

$ gem install rails --no-rdoc --no-ri
$ rails -v
$ Rails 4.0.0  

版本變的真快,現在已經是Rails 4.0版了。

Note

如果rubygems安裝發生問題,則使用以下指令更新rvm為head版本

$ rvm get latest  

再執行一次rvm rubygems currents應該可以安裝成功。再確認一次gem的版本更新為2.0.7。

$ gem -v  

設定MySQL For Redmine [setup_mysql]

建立使用者及資料庫

在MySQL新增Redmine資料庫與使用者。DB會放在/var/lib/mysql目錄中

$ mysql -u root -p  

在命令列會出現mysql的shell,建立資料庫及新使用者。

mysql>CREATE DATABASE redmine CHARACTER SET utf8;  
mysql>CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';  
mysql>GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';  
mysql>flush privileges;
mysql>exit;  

設定資料庫的編碼 (Option)

設定MySQL資料庫的預設編碼。我們將預設的編碼都設為utf–8。
在mysql的設定檔目錄中建立characterset.cnf並加入編碼設定

$ cd /etc/mysql/conf.d
$ sudo vim characterset.cnf
//加入編碼設定
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8  

重啟MySQL

$ sudo service mysql restart  

輸入以下命令後會進入myaql的命令列模式

$ mysql -u root -p  

檢查mysql目前的狀態

mysql>show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

或是使用status指令也可看mysql的設定
mysql>status
//結束mysql指令列
mysql>exit;  

安裝與設定redmine 2.3.2 [setup_redmine]

下載並設定工作目錄

由於我們的目地是設定為multi user的環境,預設的安裝目錄為/usr/share。並且要將群組改為rvm讓其他ruby相關程式可以寫入資料到此資料夾中。在使用者家目錄下開始執行。

$ cd ~
$ wget http://rubyforge.org/frs/download.php/77023/redmine-2.3.2.tar.gz
$ tar -xzvf redmine-2.3.2.tar.gz
$ sudo mv redmine-2.3.2 /usr/share
$ cd /usr/share
$ sudo ln -s /usr/share/redmine-2.3.2 /usr/share/redmine  

建立及編輯redmine的database.yml設定檔

在/usr/share/redmine目錄下設定database.yml

$ cd /usr/share/redmine
$ cp ./config/database.yml.example ./config/database.yml
$ vim ./config/database.yml  

修改內容如下,使用者名稱及密碼就是用剛剛在建立MySQL的命令列建立資料庫及使用者時的資料。

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "1234567"
  encoding: utf8

建立及編輯redmine的郵件設定檔

在/usr/share/redmine目錄下設定configuration.yml,透過Gmail來當成SMPT寄送信件。

$ cd /usr/share/redmine
$ cp ./config/configuration.yml.example ./config/configuration.yml
$ vim ./config/configuration.yml  

修改內容為

production:
  email_delivery:
  delivery_method: :smtp
  smtp_settings:
    #tls: true
    enable_starttls_auto: true
    address: "smtp.gmail.com"
    port: 587
    domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
    authentication: :plain
    user_name: "your_email@gmail.com"
    password: "your_password"  

Note

記得要將tls: true這一行拿掉,否則會發生SSL error。


安裝及設定bundler [setup_bundler]

不需在意目前在哪個目錄下都可以開始執行以下的指令

$ gem install bundler --no-rdoc --no-ri
$ sudo apt-get install libmagickwand-dev libmysql-ruby libmysqlclient-dev
$ gem install mysql2
$ cd /usr/share/redmine
$ bundle install --without development test postgresql sqlite
//顯示以下訊息表示成功
Your bundle is complete!  

安裝好的版本分別為:
* rmagick:2.13.2
* bundler:1.3.5
* mysql2:0.3.13

與資料庫連結

產生 session store secret

$ rake generate_secret_token  

Note:如果發生mysql錯誤,需要再安裝gem的MySQL2

產生資料庫結構

$ RAILS_ENV=production rake db:migrate
//最後一行顯示以下訊息表示成功
==  RemoveIssuesDefaultFkValues: migrated (0.0612s) ===========================

產生預設的組態資料

$ RAILS_ENV=production rake redmine:load_default_data
//顯示以下訊息表示安裝成功
Default configuration data loaded.

命令列會提示預設語言,按ENTER使用預設的英語。

設定redmine及apache的www目錄權限 [setup_redmine_permission]

使用user account去執行redmine application時,必需設定相關的permission。主要的目的為:
* Files (附件檔)
* Log(應用程式的log檔,production.og)
* tmp and tmp/pdf(主要用來產生pdf檔。如果沒有的話,需要建立一個)
* public/plugin_assets(plugin的東東)。經過實驗,plublic/plugin_assets要設為775才可以正常安裝plug-in。但官方的建議是755,不知為何。
以下命令需在redmine主目錄下執行

$ cd /usr/share/redmine
$ mkdir public/plugin_assets
//記得將user-account換成自已的帳號
$ sudo chown -R user-account:www-data files log tmp public/plugin_assets config.ru
$ sudo chmod -R 775 files log tmp public/plugin_assets  

到這𥚃redmine就安裝玩成了!
在部署redmine到apache前,可以用ruby的webrick server測試redmine是否有正常動作。

// 使用ruby 3.1以上和rails 4.0以上版本,請用以下指令
$ ruby script/rails server webrick -e production  

然後打開uBuntu中的firefox browser,打入0.0.0.0:3000,有看到redmine的首頁就表示安裝成功了!


安裝與設定phpmyadmin來管理MySQL(option) [setup_phpmyadmin]

在輸入以下指令後會開始安裝phpmyadmin。安裝過程會跳出window要求選擇http的server是哪一種,我們選擇apache2。

$ sudo apt-get install phpmyadmin  

接下來會再問是否要使用dbconfig-common來設定﹣*Configure database for phpmyadmin with dbconfig-common? *。選Yes,接下來會要求輸入MySQL的root密碼。然後會再要求向MySQL註冊一個root(這個root與uBuntu的root的帳號不同喔)密碼讓phpAdmin可以存取MySQL。

設定並啟動phpmyadmin

將下面這一行加入/etc/apache.conf

$ Include /etc/phpmyadmin/apache.conf  

重啟apache

$ sudo service apache2 restart  

接下來連入phpmyadmin

http://127.0.0.1/phpmyadmin/  

看到登入畫面後,以root帳號,password則輸入之前在安裝phpmyadmin時輸入的root密碼,就可以登入了。


安裝及設定Apache Passenger [setup_apache_passenger]

為了避免裝到舊的版本而且連帶安裝了舊版本的ruby,不要用apt-get而是要用gem來安裝。

$ gem install passenger --no-rdoc --no-ri
//顯示以下訊息表示安裝成功
Successfully installed passenger-4.0.14  

在安裝apache2的passenger套件前,先裝好其他所需套件

$ sudo apt-get install libcurl4-openssl-dev apache2-threaded-dev libapr1-dev libaprutil1-dev  

接下來使用ruby的passenger來安裝需要的apache2 module。

$ passenger-install-apache2-module  

執行後會跑出一堆字說明照著說明安裝就可以順利的安裝好apache2的module。因為會作make的動作,所以安裝過程會有點久,裝好後會顯示The Apache 2 module was successfully installed.。然後會提示如何將ruby on rails的app透過apache上線的設定方式。

這𥚃要特別注意,因為passenger會一直進版本,以下的設定千萬不要直接拿去貼上,否則會出現錯誤。請直接複製在apache-passenger後在螢幕上顯示的文字。

   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p448/gems/passenger-4.0.14/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p448/gems/passenger-4.0.14
   PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-1.9.3-p448/ruby  

所以我們要在目錄/etc/apache2/conf.d/新增一個passenger.conf,並將以上的訊息一字不漏的填入這個檔案中。此檔會在/etc/apache2/apache.conf中被引入。

$ cd /etc/apache2/conf.d
$ sudo vim passenger.conf
//還要加入以下兩行到這個檔案中以設定redmine的首頁,我是加在最後一行
RailsBaseURI /redmine
//有需要部署網站的要加以下這一行,若是內部測試不需要
PassengerAppRoot /usr/share/redmine  

最後將redmine的文件權限改成www-data(給apache2的群組)鏈結到apache的www中,這樣就可以透過連結http://hostname/redmine到首頁。

$ sudo chown -R www-data:www-data /usr/share/redmine-2.3.2
$ sudo ln -s /usr/share/redmine/public /var/www/redmine  

重新啟動apache

$ sudo service apache2 restart  

到firefox打入127.0.0.1/redmine就可以進到redmine的首頁。以預設的admin帳號登入(密碼為admin),就可以進入管理頁面了。

安裝完passenger時會提供以下comment(option)
接下來也會再提供example去設定apache的Virtual Host。(在本機上先沒有做這個設定)

<VirtualHost *:80>
ServerName http://www.yourhost.com
# !!! Be sure to point DocumentRoot to ‘public’!
DocumentRoot /somewhere/public
<Directory /somewhere/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews

其他redmine的設定及使用技巧(option)[snippet]

避免log檔太大的解法

修改config/additional_environment.rb

#Logger.new(PATH,NUM_FILES_TO_ROTATE,FILE_SIZE)
config.logger = Logger.new('/path/to/logfile.log', 2, 1000000)
config.logger.level = Logger::INFO  

備份redmine DB到google雲端硬碟

有位好心人寫了一個script可以將redmine備份到google storage,Click Here

補充資料 [appendix]

  • www-data群組:安裝apache後,會產生一個www-data群組
  • chmod +s:改變SUID/SGID程序充許一般用戶以root身份執行該程序。
  • mysqladmin -u root password:在MySQL新增root增號及設定密碼。
  • RubyGems:Ruby 社群最常使用的套件管理系統

網路上找到的參考資料 [internet_reference]

問題與解決 [question_answer]

  • 以gem來安裝ruby or rails套件時,是否應該加sudo?

    參考此連結,Click Here,專家說不加sudo比較好,因為用sudo容易會有權限的問題。建議所有用gem安裝的套件都不要用sudo。

  • redmine要放在/usr/local或/usr/share?

    依據這個參考網站解釋,usr/local主要是系統管理者所控制的軟體放置的地方。而/usr/share主要用來分享不同平台可以共享的應用程式,且不需要修改或儲存任何資料。

  • 如果要將redmine host存取改用redmine.mydomain.com而不是用mydomain.com/redmine,要如何解決?

    要使用

架設redmine做專案管理

本篇主要說明如何在uBuntu安裝redmine,備份redmine資料庫,設定e-mail讓redmine可以發mail給使用者。
版本:Redmine 1.4.4.stable,ruby 1.9.3p194 (2012–04–20 revision 35410)
最後更新日期:2013/8/22

安裝Apache, mod-passenger, and MySQL

首先安裝apache和mod-passenger( 主要是用來做Ruby應用程式的佈署,比如說Ruby on Raila的Framework)

$ sudo apt-get install apache2 libapache2-mod-passenger  

再來安裝MySQL

$ sudo apt-get install mysql-server mysql-client 

在完裝完MySQL後,會跳出一個window需要輸入DB的root登入密碼。然後在第2個畫面輸入密碼做確認。

Package configuration

  ┌────────────────────┤ Configuring mysql-server-5.5 ├─────────────────────┐   
  │ While not mandatory, it is highly recommended that you set a password   │   
  │ for the MySQL administrative "root" user.                               │   
  │                                                                         │   
  │ If this field is left blank, the password will not be changed.          │   
  │                                                                         │   
  │ New password for the MySQL "root" user:                                 │   
  │                                                                         │   
  │ _______________________________________________________________________ │   
  │                                                                         │   
  │                                 <Ok>                                    │   
  │                                                                         │   
  └─────────────────────────────────────────────────────────────────────────┘   
  ┌────┤ Configuring mysql-server-5.5 ├──────────┐
  │                                              │
  │ Repeat password for the MySQL "root" user.   │
  │                                              │
  │                                              │
  │ ____________________________________________ │
  │                                              │
  │                   <Ok>                       │
  │                                              │
  └──────────────────────────────────────────────┘

安裝redmine package

接下來開始安裝redmine

$ sudo apt-get install redmine redmine-mysql

安裝完成後會跳出一個畫面問說要不要去設定database。在這𥚃我們選擇Yes

 ┌──────────────────────────┤ Configuring redmine ├──────────────────────────┐  
 │                                                                           │  
 │ The redmine/instances/default package must have a database installed and  │  
 │ configured before it can be used.  This can be optionally handled with    │  
 │ dbconfig-common.                                                          │  
 │                                                                           │  
 │ If you are an advanced database administrator and know that you want to   │  
 │ perform this configuration manually, or if your database has already      │  
 │ been installed and configured, you should refuse this option.  Details    │  
 │ on what needs to be done should most likely be provided in                │  
 │ /usr/share/doc/redmine/instances/default.                                 │  
 │                                                                           │  
 │ Otherwise, you should probably choose this option.                        │  
 │                                                                           │  
 │ Configure database for redmine/instances/default with dbconfig-common?    │  
 │                                                                           │  
 │                    <Yes>                       <No>                       │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘ 

然後下一個畫面會問說要用哪一種database。因為我們安裝的是MySQL,所以常然選擇MySQL

 ┌──────────────────────────┤ Configuring redmine ├──────────────────────────┐  
 │ The redmine/instances/default package can be configured to use one of     │  
 │ several database types. Below, you will be presented with the available   │  
 │ choices.                                                                  │  
 │                                                                           │  
 │ Database type to be used by redmine/instances/default:                    │  
 │                                                                           │  
 │                                  sqlite3                                  │  
 │                                  pgsql                                    │  
 │                                  mysql                                    │  
 │                                                                           │  
 │                                                                           │  
 │                    <Ok>                        <Cancel>                   │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘ 

下一個畫面需要輸入MyAQL DB的密碼,輸入剛剛安裝MySQL時輸入的root密碼

 ┌──────────────────────────┤ Configuring redmine ├──────────────────────────┐  
 │ Please provide the password for hte administrative account with which     │  
 │ this package should create its MySQL database and user.                   │  
 │                                                                           │  
 │ Password of the database's administrative user:                           │  
 │                                                                           │  
 │ ******__________________________________________________________________  │  
 │                                                                           │  
 │                   <Ok>                       <Cancel>                     │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

下一個畫面要求輸入一個密碼來保護redmine的DB(與MySQL的root密碼不同)。輸入一個密碼給redmine DB。

 ┌──────────────────────────┤ Configuring redmine ├──────────────────────────┐  
 │ Please provide a password for redmine/instances/default to register with  │  
 │ the database server.  If left blank, a random password will be            │  
 │ generated.                                                                │  
 │                                                                           │  
 │ MySQL application password for redmine/instances/default:                 │  
 │                                                                           │  
 │ *******__________________________________________________________________ │  
 │                                                                           │  
 │                    <Ok>                        <Cancel>                   │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘

接下來會再要求確認一次redmine DB的密碼

   ┌────┤ Configuring redmine ├─────┐                       
   │                                │                       
   │                                │                       
   │ Password confirmation:         │                       
   │                                │                       
   │ *******_______________________ │                       
   │                                │                       
   │     <Ok>         <Cancel>      │                       
   │                                │                       
   └────────────────────────────────┘   

到這邊就算是將套件安裝完成,接下來就開始設定其他的項目。

設定Apache

需要設定2個檔案:

/etc/apache2/mods-available/passenger.conf
/etc/apache2/sites-available/default

首先來修改passenger.conf

$ sudo vi /etc/apache2/mods-available/passenger.conf

修改內容如下:

<IfModule mod_passenger.c>
  PassengerDefaultUser www-data
  PassengerRoot /usr
  PassengerRuby /usr/bin/ruby
</IfModule>

再來建立redmine的space到apache的www中:

$ sudo ln -s /usr/share/redmine/public /var/www/redmine

下一步是設定/etc/apache2/sites-available/default
之前我們已經將redmine的space做了symlink到/var/www/redmine,這𥚃要建立一台redmine的server連結到/var/www/redine,修改內容如下:

$ sudo vi /etc/apache2/sites-available/default  

<Directory /var/www/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

然後再重啟apache

$ sudo service apache2 restart

用本機測試redmine是否已經正確設定並正常的工作

$ firefox http://127.0.0.1/redmine

看到redmine首頁後,可以點選右上角的Sign In,並以admin登入,預設密碼為admin
Note: 這個密碼與安裝redmine DB時輸入的密碼不同。
強烈建議登入後修改admin的密碼,以確保系統安全。

設定e-mail

使用G-Mail

Note(2013/8/21):新版本的redmine/ruby不可安裝action_mailer_optional_tls

使用新版本的redmine/ruby時,已經不再使用email.yml,而是使用configuration.yml。
先將configuration.yml.example拷貝一份到/etc/redmine/default

$ cd /usr/share/redmine/config
$ sudo cp ./configuration.yml.example /etc/redmine/default/configuration.yml

接下來使用vim修改configuration.yml(在etc/redmine/default目錄下)

$ cd /etc/redmine/default
$ sudo vim configuration.yml

將default區塊修改如下:(縮排的空格很重要,務必要照原本的example的格式,否則會有問題)

default:
  email_delivery:
  delivery_method: :smtp
  smtp_settings:
    tls: true
    enable_starttls_auto: true
    address: "smtp.gmail.com"
    port: 587
    domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
    authentication: :plain
    user_name: "your_email@gmail.com"
    password: "your_password"

修改完存檔後,需要修改這個檔案的owner及權限

$ sudo chown root:www-data configuration.yml
$ sudo chmod 0640 configuration.yml

重新啟動apache

$ sudo service apache2 restart

FAQ

為何已經將administration/Settings/Display的預設語言改為中文,但顯示界面還是英文?

每個使用者可以設定自已的使用界面語言。到MyAccount,在Language選項改為中文即可。

發生An error occurred while sending mail (Expected /version.rb to define VERSION),要如何處理?

看這篇文章

參考文章

官方文件-安裝redmine in uBuntu

英文版的安裝文件Step By Step,我的這一篇大部份也是參考這一份來做的。除了mail的設定部份,文件中所描述的大部份都是可行的。

官方網站for mail configuration

由官方所提供的Email configuration設置。建構中。

Redmine+Apache+SVN+Postfix完整配置指南

由葵中劍Blog發表,雖然是2010的文章,用的是較舊的版,還是可以用來參考。

另一個安裝redmine的網站文件

以question/answer的方式提供plug-in,svn,mail的設定方式,很有參考性。

如何使用FilePicker在網站上做傳圖服務

部落格的圖要放在哪,一直是個頭大的問題。因為有些部落格所提供的空間並不大,可能放了幾張圖後空間就爆了,那不就要付錢買空間,但這一定不是大家想要的。
那要怎麼做呢?圖檔一定要在網路放圖檔的地方,目前有幾種免費的雲端可以放:
1.放在dropbox並將連結貼到HTML。但安全性堪慮。
2.放在Google Driver,並將連結貼到HTML。但安全性堪慮。
3.有一個中繼的網站,我們可以將dropbox/google_driver的圖形upload到該網站,然後會產生一個連結,但從link看不出來這張圖的原始檔案是放在哪𥚃。這不就是我們想要的嗎?

所以我們就來實際使用Filepicker的服務,看看到底有沒有這麼好用。

註冊並取得API key

Ink filepicker的官網 去註冊一個免費帳號。不用花錢不但表功能不好喔!它提供每個月5000張的上傳圖檔用量。如果不是大型網站,這個用量應該很足夠了吧!

註冊完成後,到自已的帳戶頁面去取得API Key,才可以繼續以下的程序。

上傳圖片並取得轉換後的網址

參考線上文件的Filepicker Getting Start,先來實作一下上傳一張圖片並從filepicker.io取得一個新的圖片網址。

載入filepicker.io的js

  • 在HTML中先引入filepicker的js函式庫
 <script src="chrome://api.filepicker.io/v1/filepicker.js" type="text/javascript"></script>
  • 使用pick()來上傳圖片並取得圖片網址
filepicker.setKey('Super_Awesome_Key'); //將Super_Awesome_Key置換成實際的API Key

filepicker.pick(function(InkBlob){
console.log(InkBlob.url);
});
  • 實際操作

    我在jsbin.com的網頁已經將上述的程式都作好了,可以試一下。

    DMEO

    選擇pick file後,畫面會跑出一個由filepicker提供的UI window,可以將任何圖片拖曳進去或是去選擇在dropbox, Google driver或是電腦中的任何單一圖檔。選擇一個圖檔並完成上傳後,網頁會顯示轉換後的網址。將這個網址貼在browser上就可以看到圖片被顯示出來了!

    也就是說,透過filepicker.pick()在完成圖片的上傳後,會呼叫一個callback function並傳回InkBlob這個物件。InkBlob.url就是該圖片的網址(也可以說是pointer?)。

更多的應用

應用1﹣上傳一個檔案並限定上傳圖片的來源及格式

如果要使用filepicker.pick()限定使用者上傳圖片的來源及格式。
官方所提供的API格式為:

filepicker.pick([options], onSuccess(InkBlob){}, onError(FPError){})

可以參考官方網站詳細的文件 ﹣ pick

第一個參數是一個物件。物件中的個別元素分別為:

  • mimetypes: [‘image/*’, ‘text/plain’] //表示只接受image及文件型態。
  • container: ‘window’ //上傳圖檔時開一個視窗。
  • services:[‘COMPUTER’, ‘FACEBOOK’, ‘GMAIL’] //限定只接受從本機電腦,Facebook及Gmail上傳檔案。

第二個參數是圖片上傳成功時會呼叫的callback function,圖片成功上傳後,會執行這個函數。

第三個參數是圖片上傳失敗時會呼叫的callback function。

範例:限定檔案來源為本地端,Facebook,Gmail。成功上傳檔案時,將InkBlob物件以JSON字串格式印在console,若上傳失敗則將錯誤訊息印在console。

filepicker.pick({
    mimetypes: ['image/*', 'text/plain'],
    container: 'window',
    services:['COMPUTER', 'FACEBOOK', 'GMAIL'],
},
function(InkBlob){
    console.log(JSON.stringify(InkBlob));
},
function(FPError){
    console.log(FPError.toString());
}
);

成功上傳圖檔會得到以下的log

{"url":"https://www.filepicker.io/api/file/pBPleeX2RLidWDH2D7pq","filename":"螢幕快照 2013-08-15 下午12.01.30.png","mimetype":"image/png","size":76961,"key":"2OGXLIPQTMGjmmiyOwpc_螢幕快照 2013-08-15 下午12.01.30.png","isWriteable":true}

如果在上傳檔案的window沒有傳任何檔案就直接關閉,會得到錯誤訊息

FPError 101. Include filepicker_debug.js for more info

應用2﹣上傳多個檔案並限定上傳圖片的來源及格式

與上傳一個檔案的差異僅在呼叫不同的API。
使用filepicker.pickMultiple()可以上傳多個檔案。使用的參數與filepicker.pick()都相同。
詳細使用方式可以參考官方文件﹣filepicker.pickMultiple

應用3﹣將上傳的圖片存入Amazon S3雲端

待續…

By tony chen

wordpress.com發文技巧的記事

編輯技巧
要在wordpress.com發表的文章中對source code的文字要作highlight時,可以用下列的方式:

# sudo service smbd restart
# sudo service nmbd restart
# sudo service httpd restart

還有其他的參數,可以參考官網及其他部落格的連結:
http://en.support.wordpress.com/code/posting-source-code/
http://visurus.wordpress.com/2011/06/28/syntax-highlighting-on-wordpress-com/

在uBuntu架設Samba 3.0的應用

使用者環境

小軒想要在家中建立一個可以分享檔案的伺服器, 讓每一個成員可以自由的分享檔案。但他又希望每個人可以有自已的獨立空間而不被其他人看到一些私密的檔案, 要如何規劃與架設這個檔案伺服器呢?

需求

  • 在uBuntu架設Samba 3.0。
  • Samba只需在內部區域網路存取,外部電腦不需存取到此server的檔案。
  • 需要使用者登入才可以存取
  • 每個使用者的空間只有自已才可以看的到
  • 要有一個檔案交換的空間讓大家可以交換檔案
  • 要有一個公用空間讓大家可以放檔案並供他人讀取, 不可修改檔案內容

預設限制

  • 使用相同的工作群組
  • 同一網域
  • 每台主機的NetBIOS name要獨一無二

實戰安裝

安裝Samba3.0


# sudo apt-get install samba samba-common

查smbd與nmbd啟動狀態

# service smbd status# service nmbd status

檢查smbd與nmbd啟動狀態

# service smbd status
# service nmbd status
# ps -ely | grep smb
# findsmb

Note: findsmb會列出samba的ip address, hostname, 它是在sambaclient套件中, 沒有安裝可能無法執行。

確認windows及MAC的網芳

打開網芳, 在位址列輸入samba server的主機位置 \\192.168.1.33,則會出現“印表機和傳真機”的圖示, 這樣就表示samba已經可以與window互連。

參考資料

建構一個教導新技術的架構

不進步就是退步

在科技產業, 技術日新月異, 為了要保持競爭力, 無時無刻都要告訴自已不可以停下來, 持續不間斷的學習新技術。 而學習也是要有效率的, 否則事倍功半一切都是白談。

 

就最近參加一些課程後的自我學習, 領悟到要能融會一個技術就是要能夠教導別人, 所謂教學相長正是如此。所以想要寫下來在教導上要是什麼樣的節奏才會有效。

  1. 先教基本概念。
  2. 帶著學生做一遍。
  3. 出作業讓學生做。

從學生做出來的作業, 就可以知道學的人是真的懂, 還是鴨子聽雷有聽沒有懂。我相信只要照著這個方法, 一定可以得到很好的效果。