Публикации на тази страница:
- » Linode VPS, ubuntu 8.04, ruby on rails
- » Rails nice search
- » Как да прочетем rdoc, за инсталираните локално ruby gems?
- » FeedBurner Api - извличане статистика за "feed"
- » Използване на константа, като име на модел
- » Генериране на RSS в Rails сайт/приложение
- » Rails sitemap generator
- » subversion and rails project
- » Rails multiple site application theme managment
Linode VPS, ubuntu 8.04, ruby on rails
Ubuntu 8.04
Ruby on Rails
Linode VPS
apt-get update apt-get install build-essential apt-get install phpmyadmin apt-get install mysql-server mysql-common apt-get install zlib1g-dev libssl-dev libreadline5-dev apt-get install apache2-prefork-dev libapr1-dev apt-get install imagemagick apt-get install gettext apt-get install subversion git-core apt-get install ruby1.8 ruby1.8-dev ri1.8 apt-get install libncurses5-dev ln -s /usr/bin/ruby1.8 /usr/bin/ruby apt-get install libmysqlclient15-dev apt-get install libmagick9-dev apt-get install libopenssl-ruby1.8 cd /tmp/ wget http://rubyforge.org/frs/download.php/55066/rubygems-1.3.2.tgz tar xzvf rubygems-1.3.2.tgz cd rubygems-1.3.2 ruby setup.rb ln -s /usr/bin/gem1.8 /usr/bin/gem gem sources -a http://gems.github.com gem install mysql gem install rails -v 2.3.2 gem install capistrano gem install rmagick gem install hpricot gem install httparty cd /tmp/ wget http://rubyforge.org/frs/download.php/51100/ruby-enterprise-1.8.6-20090201.tar.gz tar xzvf ruby-enterprise-1.8.6-20090201.tar.gz ./ruby-enterprise-1.8.6-20090201/installer /opt/ruby-enterprise-1.8.6-20090201/bin/passenger-install-apache2-module ln -s /opt/ruby-enterprise-1.8.6-20090201/ /opt/ruby /opt/ruby/bin/gem sources -a http://gems.github.com /opt/ruby/bin/gem install capistrano /opt/ruby/bin/gem install rmagick /opt/ruby/bin/gem install hpricot /opt/ruby/bin/gem install httparty
Rails nice search
Проблема: http://somehost.com/home/index?q=search_string
route:
map.q '/q/:q', :controller => 'home', :action => 'index', :q => nil
form:
<% form_tag({:controller => "home", :action => "search"}, :method => "get") do %> <%= text_field_tag :q %><br/> <%= submit_tag 'Търси' %><br/> <% end %>
controller:
def search redirect_to q_url(:q => params[:q]) end
Резултат: http://somehost.com/q/search_string
Как да прочетем rdoc, за инсталираните локално ruby gems?
Стартирай:
gem server
Отвори:
http://localhost:8808/
FeedBurner Api - извличане статистика за "feed"
app/models/feed_burner.rb
class FeedBurner include HTTParty base_uri 'feedburner.google.com' format :xml def self.get_feed_stats(uri) get('/awareness/1.0/GetFeedData', :query => {:uri => uri}) end ... end
Controller:
stats = FeedBurner.get_feed_stats("[feed_uri]")
config/environment.rb
... config.gem "httparty" ...
Използване на константа, като име на модел
Използване на константа/string като име на модел:
Hash с константи:
rtypes = {
...
"rapps"=>"RentApp",
"sapps"=>"SaleApp",
...
}
Използване като имена на модели:
rtypes.each_pair {|offer_type, model| offers = model.constantize.find :all ... }
Константата може и да не е с точното име на модела. Например SaleApp може да бъде sale_app, тогава става така:
offers = model.classify.constantize.find :all
Генериране на RSS в Rails сайт/приложение
Примерно генериране на RSS в Rails сайт/приложение. Примера е от кода на sharesnippets.com
Controller:
def rss begin user = User.find_by_login(params[:user]) @page_title = user.login + " at www.sharesnippets.com" @posts = Post.find :all, :conditions => {:private => false, :user_id => user.id}, :order => "created_at desc" respond_to do |format| format.xml { render :layout => false } end rescue flash[:notice] = 'Няма такъв потребител !' redirect_to root_url return false end end
View: rss.xml.builder
xml.instruct! xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do xml.channel do xml.title @page_title xml.link root_url xml.pubDate CGI.rfc1123_date(@posts.first.updated_at) if @posts.any? xml.description @page_title @posts.each do |post| xml.item do xml.title post.title xml.link url_for(:only_path => false, :controller => 'posts', :action => 'show', :id => post.permalink) xml.description post.body.gsub(/\n/, "<br />") xml.pubDate CGI.rfc1123_date(post.created_at) xml.guid url_for(:only_path => false, :controller => 'posts', :action => 'show',:id => post.permalink) xml.author post.user.login end end end end
Rails sitemap generator
Controller:
def sitemap @posts = Post.find :all, :conditions => {:private => false} respond_to do |format| format.xml { render :layout => false } end end
Helper:
def w3c_date(date) date.utc.strftime("%Y-%m-%dT%H:%M:%S+00:00") end
View: sitemap.xml.builder
xml.instruct! xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9", "xsi:schemaLocation"=>"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd", "xmlns"=>"http://www.sitemaps.org/schemas/sitemap/0.9" do xml.url do xml.loc "http://www.sharesnippets.com" xml.lastmod w3c_date(Time.now) xml.changefreq "always" end @posts.each do |post| xml.url do xml.loc url_for(:only_path => false, :controller => 'post', :action => 'show', :id => post.id) xml.lastmod w3c_date(post.created_at) xml.changefreq "weekly" xml.priority "0.9" end end end
route:
map.connect "sitemap.xml", :controller => "home", :action => "sitemap"
subversion and rails project
svn remove log/* --force svn commit -m "removing all logs from subversion" svn propset svn:ignore "*.log" log/ --force svn update log/ svn commit -m "Ignoring all files in /log/ ending in .log" svn propset svn:ignore "*" tmp/sessions tmp/cache tmp/sockets svn commit -m "Ignoring all files in /tmp/" svn remove tmp/* svn propset svn:ignore "*" tmp/ svn update tmp/ svn commit -m "ignore tmp/ content"
Rails multiple site application theme managment
before_filter :get_site attr_reader :site theme :get_theme, :get_theme_site def get_site url = request.domain(request.subdomains.size + (request.subdomains.first == 'www' ? 0 : 1)) @site ||= Site.find_by_url(url) || Site.find(:first, :order => 'id') end def get_theme site.theme end def get_theme_site site.id.to_s end
Още


а>
а>