Rails
De Hecpeare
Notas viejas y posiblemente desactualizadas. Algo más actualizado: Subversion, MySQL, Deployment
[editar] Instalación
Ver también wiki/Deployment
[editar] MySQL
sudo aptitude install mysql-server libmysql-ruby
Cambiamos la contraseña
mysqladmin -u root password NUEVO_PASSWORD
Reiniciamos el servidor de MySQL:
sudo /etc/init.d/mysql restart
Crear base de datos
mysqladmin -u NOMBRE_USUARIO -p create NOMBRE_BASE_DATOS
[editar] Ruby
sudo aptitude install ruby ruby1.8 ruby1.8-dev rdoc ri irb
[editar] RubyGems
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz name='rubygems-0.9.4' tar zxvf $name.tgz cd $name sudo ruby setup.rb cd .. rm $name.tgz rm -fr $name
[editar] Rails
sudo gem install rails
[editar] Notas
[editar] varias bases de datos
[editar] mongrel
mongrel_rails start -e production -p 3003 -d
[editar] OpenID
[editar] Instalar
gem install ruby-openid
[editar] Ejemplos
Ejemplo de Ben Curlis. Otros ejemplos un poco más viejos.
[editar] Sólo openid, no dar opción a contraseña
rails your_app cd your_app mysqladmin -u USUARIO -p create pr_development
sudo gem install openid_login_generator -y script/generate openid_login openid_account
Modificamos app/controllers/application.rb:
require_dependency "openid_login_system" class ApplicationController < ActionController::Base include OpenidLoginSystem model :user # Pick a unique cookie name to distinguish our session data from others' session :session_key => '_pr_session_id' end
script/generate migration create_user_model
Modificamos db/migrate/001_create_user_model.rb
class CreateUserModel < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.column :openid_url, :string
end
end
def self.down
drop_table :users
end
end
rake db:migrate
[editar] Gráficos con Gruff
[editar] Instalación
sudo gem install gruff
y según esto instalamos rmagick:
sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8 sudo apt-get install libmagick9-dev ruby1.8-dev sudo gem install rmagick
Me ha dado problemas instalarlo en local
[editar] Enlaces
- http://gruff.rubyforge.org/
- Imágenes de ejemplo
- http://nubyonrails.com/pages/gruff
- http://topfunky.net/svn/gruff/trunk/lib/gruff/
[editar] Ejemplos
de aquí:
#!/usr/bin/ruby
require 'rubygems'
require 'gruff'
g = Gruff::Line.new
g.title = "My Graph"
g.data("Apples", [1, 2, 3, 4, 4, 3])
g.data("Oranges", [4, 8, 7, 9, 8, 9])
g.data("Watermelon", [2, 3, 1, 5, 6, 8])
g.data("Peaches", [9, 9, 10, 8, 7, 9])
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
g.write('my_fruity_graph.png')
| imag (quedaría bien ;) |
y aquí:
#Here's how to make a Pie graph:
g = Gruff::Pie.new
g.title = "Visual Pie Graph Test"
g.data 'Fries', 20
g.data 'Hamburgers', 50
g.write("test/output/pie_keynote.png")
#To control where the pie chart starts creating slices, use #zero_degree.
[editar] Exportar a excel
sudo gem install spreadsheet-excel
[editar] Zona Horaria
basta instalar la gema tzinfo y el plugin tzinfo_timezone:
gem install tzinfo ruby script/plugin install tzinfo_timezone
y ahora para convertir:
time=Time.now # , g.created_at o lo que sea TimeZone['Madrid'].utc_to_local(time.utc)
Algunos comentarios aquí y aquí
Para que pueda ser configurable por el usuario añadimos la columna timezone en la tabla de usuarios:
t.column :time_zone, :string
y en el form_for que queramos (posiblemente en la vista donde se crean/editan los usuarios):
<%= form.time_zone_select :time_zone %>
[editar] Anotar modelos
Instalar el plugin annotate_models:
ruby script/plugin install http://svn.pragprog.com/Public/plugins/annotate_models
[editar] ... Excel
Instalar...
ACABAR
[editar] Idiomas
gettext o globalize
Para traducir a un sólo idioma: Localization Simplified
[editar] Usar link_to dentro de una vista para generar correos electrónicos, con ActionMailer
No he encontrado mucho sobre el tema. Por ahora lo he resuelto con la constante BASE_URL en environment.rb, que la utilizo para pasarle el host a link_to:
<%=link_to(nil,{:host => BASE_URL,:controller=>:admin, :action=>:password_change, :id=>@aleat, :only_path => false},:method=>:post)%>
[editar] Dreamhost
(servidor para pruebas, aunque ya no lo uso)
wiki de dreamhost, Instalar gemas, Subversion, Capistrano
[editar] Varios
[editar] scripts
[editar] resetea.sh
rake db:migrate VERSION=0 rake db:migrate rake annotate_models #rake db:test:prepare #rake db:fixtures:load rm public/images/tmp/* rm public/images/tmp_* ruby script/server #mongrel_rails restart
[editar] actualiza.sh
Tenemos tres carpetas:
- RUTA_EMPLISTEN_LOCAL
- RUTA_ARCHS_A_SUSTITUIR Archivos que van en el servidor que son diferentes a los usados en local:
- public
- .htaccess
- dispatch.fcgi
- config
- database.yml
- environment.rb
- public
- RUTA_EMPLISTEN_A_SUBIR
Vamos a copiar RUTA_EMPLISTEN_LOCAL a RUTA_EMPLISTEN_A_SUBIR y luego sustituimos los archivos que van a ser diferentes de RUTA_ARCHS_A_SUSTITUIR a RUTA_EMPLISTEN_A_SUBIR
(Sí, chapucero comparado con usar subversion o capistrano, pero para empezar...)
echo '----> copiamos' rsync -avz --delete RUTA_EMPLISTEN_LOCAL/* RUTA_EMPLISTEN_A_SUBIR echo '----> modif arch' cp RUTA_ARCHS_A_SUSTITUIR/* RUTA_EMPLISTEN_A_SUBIR -r echo '----> a dreamhost' rsync -avz --delete --stats --progress RUTA_EMPLISTEN_A_SUBIR/* USUARIO@www.hecpeare.com:RUTA_EMPLISTEN_SERVIDOR
[editar] Otras notas
- logger.info("eooooooo")
Hmm..I've been using
killall -USR1 ruby
killall -USR1 dispatch.fcgi
rake db:migrate RAILS_ENV=production
Si est�s en la m�quina de producci�n y usas linux(con bash) puedes poner
en el fichero ~/.bashrc lo siguiente para que todos los comandos que
ejecutes los haga en el entorno de
producci�n:
export RAILS_ENV=production
Adem�s de ser m�s "prolijo", te va a dar la ventaja de, por ejemplo, que los controles se llenen autom�ticamente en el formulario de creaci�n.
class Producto < ActiveRecord::Base
def initialize
super
self.costo ||= 0.0
self.pais ||= Pais.find(:first)
end
end
before_filter { comprueba_permiso? 10 }
before_filter { comprueba_permiso? 20 }
- select_tag aquí y aquí
- Nombres dinámicos en variables de instancia
@n_q.times { |n| instance_variable_set("@mtask#{n}".to_sym, Mtask.new(params["mtask#{n}"])) }
[editar] Problemas a resolver
- sesiones en test funcional
- before_save en un módulo (mtask):
def before_save
self.thank_with_pie_graph=0#si uso false o quito self no va. ¿pq? ¿no es método de instancia?
end
y tb (poco después, en mtask)
self.tasks_rest-=1 #rev pq hace falta el self (mm sino no va, pero es una instancia...)
- Cuando foreign_key en las migraciones
- A veces al hacer, por ej, mtask.tasks[0].mtask da problemas.-- 14:39 25 may 2007 (PDT)
- En show_comments.rhtml al intentar usar la template _task.rhtml
- En show_comments.rhtml en <div id="task_sender">
- modelo task, método sender. ¿Pq no va mtask.user?? (tras añadir el has_many y el belongs_to)
- lib/array_extension.rb
#module TempModule ; si lo pongo no va, rev pq (puede q pq al dar un espacio de nombres...)
#uf la cantidad de accesos a la bbdd. Arreglar.
module ArrayExtension
def all
map {|x| [x.name, x.id] } #mm no se podrá pedir una col entera??? (para q no hayan tantos accesos)
end
def names
map {|x| x.name } # ¿pq con echo no va y tenia q poner: a=[]; map {|x| a<<x.name };a?
end
def jnames
names.join(", ")
end
end
#end
- Modelo task
def sender u=mtask.gmtask.user_id User.find(u) if u #Rev pq no va simplem: mtask.user (tras añadir el belong_to y el has_many...). #La 1ª vez q se recarga la pag va, pero luego las dependencias... end
[editar] Enlaces
wiki.rubyonrails.org sobrerailes.com wiki.onrails.com.ar
[editar] Deployment
Ver mejor wiki/Deployment
[editar] Install deprec
install with rubygems
sudo gem install deprec --include-dependencies # installs what you need (including capistrano-1.4.1)
update to latest version
sudo gem update deprec
Deprec doesn't (yet) work with Capistrano 2
When using deprec, you need to use cap1, which can happily coexist with cap2 if you have a way of calling it.
Put the following into your bash environment (~/.bash_login on OSX, ~/.bashrc on Ubuntu)
alias cap1="`which cap` _1.4.1_"
This loads the deprec recipes into Capistrano *except* when using Cap2.
echo "require 'deprec/recipes' unless respond_to?(:namespace)" >> ~/.caprc # include deprec recipes cap1 show_tasks # should now include deprec tasks
[editar] Install deprec
[editar] deploy.rb
[editar] start with cap
cap setup_admin_account_as_root
Password:
[root password]
Enter userid for new user:
[hector or deploy or ...]
Enter new UNIX password: :
[pick one] <<-- remote_user_password
cap setup_ssh_keys <<--remote_user_password
[editar] mm
...
