Showing posts with label rails. Show all posts
Showing posts with label rails. Show all posts
Sunday, December 9, 2007
Tuesday, September 11, 2007
Saturday, September 1, 2007
ActiveRecord-JDBC 0.5 can not insert object with pre-assigned Id into Oracle Database
If you encountered problem when try to insert object with pre-assigned Id into Oracle Database in JRuby 1.0.1 with ActiveRecord-JDBC 0.5, here is quick fix
module ::JdbcSpec
module Oracle
def insert(sql, name = nil, pk = nil, id_value =nil, sequence_name = nil) #:nodoc:
if pk.nil? || id_value
execute sql, name
else # Assume the sql contains a bind-variable for the id
id_value = select_one(
"select #{sequence_name}.nextval id from dual")['id'].to_i
log(sql, name) {
@connection.execute_id_insert(sql,id_value)
}
end
id_value
end
end
end
The problem is on compatibility of Oracle JDBC driver and execute_insert method of java class JdbcAdapterInternalService. The fix simply remove the usage of execute_insert method. Verification code is below
require 'rubygems' gem 'ActiveRecord-JDBC','0.5' require 'jdbc_adapter' require 'active_record' ActiveRecord::Base.establish_connection( :adapter => 'jdbc', :driver => 'oracle.jdbc.driver.OracleDriver', :url => 'jdbc:oracle:thin:@localhost:1521:DEV', :username => "scott", :password => "tiger", ) class Emp < ActiveRecord::Base set_table_name 'emp' set_primary_key 'empno' end emp = Emp.new emp.id = 9999 emp.save
Thursday, July 26, 2007
Fixture path in ActiveRecord Testing
I am using fixture in ActiveRecord Testing. I have many test classes, each using fixtures located in different directories. Individual test work fine, but fails when running together in suite. The problem is
fixture_path is class attribute/variable of Test::Unit::TestCase so all subclasses of it share the same value.
require 'rubygems' require 'active_record' require 'active_record/fixtures' class TestFoo < Test::Unit::TestCase self.fixture_path='/u01/test/fixtures/foo' end TestFoo.fixture_path # "/u01/test/fixtures/foo" class TestBar < Test::Unit::TestCase self.fixture_path='/u01/test/fixtures/bar' end TestBar.new().fixture_path # "/u01/test/fixtures/bar" TestFoo.new().fixture_path # "/u01/test/fixtures/bar"Because the Test Unit framework, load all test classes, then run them, so
TestFoo.new().fixture_path get value of TestBar.new().fixture_path. The solution is simple, just define a method fixture_path in each test class (in upcoming version after ActiveRecord 1.15.3, the problem is fixed by change fixture_path to class instance variable see ticket 6672).
class TestFoo < Test::Unit::TestCase
def fixture_path
'/u01/test/fixtures/foo'
end
end
class TestBar < Test::Unit::TestCase
def fixture_path
'/u01/test/fixtures/bar'
end
end
TestBar.new().fixture_path # "/u01/test/fixtures/bar"
TestFoo.new().fixture_path # "/u01/test/fixtures/foo"
Saturday, July 7, 2007
Tuesday, June 19, 2007
Format of Date/Time when using ActiveRecord with Oracle Database
I found no place in ActiveRecord Documentation, that describes how to enter Date/Time into Oracle Database. By looking at source code of OracleAdapter in ActiveRecord, I recognized that ActiveRecord uses Oracle
alter session command to specify date format
ActiveRecord::Base.connection.execute "alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"As implication we shall use this format (e.g '2007-06-30' and '2007-06-30 23:01:45' String are accepted) when entering data (e.g in fixture file) to Date Field.
Sunday, June 10, 2007
The secret behind Rails Integration Test
Find what is behind Rails Integration Test on good blog's post named HeadlessApp
$ script/console
Loading development environment.
>> app.class
=> ActionController::Integration::Session
>> app.get "/home"
=> 302
>> app.controller.params
=> {"action"=>"home", "controller"=>"accounts"}
>> app.response.redirect_url
=> "http://www.example.com/login"
Labels:
rails
Friday, June 1, 2007
Cruisecontrol.rb is too slow
I encountered a problem with Cruisecontrol.rb, the method link_to_code(log) is too slow to process a certain output log, sometime it takes 10 seconds making Cruisecontrol not workable. So for the time being, as workaround, I just comment out this code .
#file: app/helpers/builds_helper.rb
def link_to_code(log)
log
=begin
@work_path ||= File.expand_path(@project.path + '/work')
log.gsub(/((\#\{RAILS_ROOT\}\/)?([\w\.-]*\/[ \w\/\.-]+)\:(\d+))/) do
path, line = File.expand_path($3, @work_path), $4
if path.index(@work_path) == 0
path = path[@work_path.size..-1]
link_to ".#{path}:#{line}", "/projects/code/#{@project.name}#{path}?line=#{line}##{line}"
else
$1
end
end
=end
end
Friday, May 25, 2007
ActiveRecord testing ouside of Rails
There is many tips about how to use ActiveRecord outside of Rails but rarely about ActiveRecord testing ouside of Rails. I am working on project that use ActiveRecord ouside of Rails and need to create fixture for testing. It take me a little bit of time to figure out how to do. The source code below demonstrates the trick
require 'test/unit'
require "active_record"
require "active_record/fixtures"
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "nightlybatch",
:password => "secret",
:database => "web_orders"
)
#this is because fixture verify existence of rails database configuration
ActiveRecord::Base.configurations[:test] = ActiveRecord::Base.connection
class Product < ActiveRecord::Base
end
class TestFoo < Test::Unit::TestCase
#set fixture path explicitly
self.fixture_path="c:/temp"
fixtures :products
def test_ruby_on_rails_should_exist
assert products(:ruby_on_rails)
end
end
In order to pass the test, the fixture file products.yml shall be created in directory c:/temp, and products table shall be created in MySQL database
#c:/temp/products.yml ruby_on_rails: id: 1 name: ruby on rails rails_recipes: id: 2 name: rails recipes
Labels:
rails
Monday, April 2, 2007
Using Ruby and Rails with Oracle database
1. Download ruby-oci8-VERSION-mswin32.rb
2. Install oci8 adapter e.g. on MS Windows
c:\ruby ruby-oci8-VERSION-mswin32.rb3. Using with with Rails
ActiveRecord::Base.establish_connection( :adapter => "oci", :host => "sql_net_connect_string", :username => "foo", :password => "bar" )
Saturday, January 6, 2007
Enterprise Rails
I have found two interesting documents that describe some experiences of using ruby on rails in a real enterprise project
Rails Enterprise Ready from Jay Fields
Rails for Enterprise from Rick Bradley and Charles Johnson
Saturday, December 23, 2006
Sample code of the book Agile Web Development with Rails Second Edition
Online code sample referenced in the book is not alway working, check with what is printed on the book
RubyOnRails print debug information
do'nt use
puts "Starting delete_user"instead use
logger.info "Starting delete_user"look at content of the file ./log/development.log
RubyOnRails commands used in the book Agile Web Development with Rails
All commands
rails depot rake db:migrate ruby script/generate model Product ruby script/generate controller admin ruby script/generate migration add_price ruby script/generate scaffold product admin rake db:sessions:create rake db:sessions:clear, ruby script/console rake db:test:prepareTo enable development/test/production mode
ruby script/server -e development ruby script/server -e test ruby script/server -e production
Subscribe to:
Posts (Atom)