Czy kiedykolwiek musiałeś połączyć się z serwerem SQL za pomocą ActiveRecord? czy to możliwe? Czy ktoś może podać jakieś punkty początkowe?Łączenie z serwerem SQL za pomocą ActiveRecord
Odpowiedz
To co kiedyś:
stąd: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master
Instalacja
Po pierwsze, trzeba będzie Ruby i Ruby DBI ODBC. Według mojej wiedzy ADO DBD dla DBI nie jest już obsługiwany. Poniższa instalacja nie stanowi wyczerpującej informacji na temat sposobu instalowania i/lub konfigurowania wszystkich wymaganych ruchomych części, takich jak FreeTDS. Zakłada również instalacje gem zarówno bibliotek zależnych, jak i samego adaptera.
Należy zauważyć, że ta wersja adaptera została opracowana przy użyciu starszej wersji DBI 0.0.23 do aktualnej stabilnej wersji 0.4.0. Ponieważ późniejsze wersje DBI będą zmieniać wiele rzeczy, JEST WYSOCE ZALECANE, abyś maksymalnie zainstalował do wersji 0.4.0, co pokazują poniższe przykłady. Na razie nie obsługujemy wersji DBI wyższych niż 0.4.0. Dobrą wiadomością jest to, że jeśli korzystasz z bardzo starego DBI z ADO, technicznie ten adapter będzie nadal działał dla ciebie, ale pamiętaj, że twoja ścieżka się starzeje i może nie być obsługiwana przez długi czas.
$ gem install dbi --version 0.4.0
$ gem install dbd-odbc --version 0.2.4
$ gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com
stąd: http://lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/
Po pierwsze, należy zaktualizować ~/.profile do zawierać następujące elementy:
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
export FREETDSCONF=/etc/freetds/freetds.conf
Następnie przeładować .profile, logując się i ponownie.
Po drugie, na systemie Ubuntu 7.10 musiałem zainstalować kilka pakietów.
[email protected]:~$ sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc
Z FreeTDS zainstalowanych mogę skonfigurować go tak:
[email protected]:/etc/freetds$ cat freetds.conf
[ACUMENSERVER]
host = 192.168.0.10
port = 1433
tds version = 7.0
Ważną rzeczą jest ACUMENSERVER, który jest DSN że użyję podczas łączenia się z bazą danych. Host i port są niezrozumiałe i warto zauważyć, że musiałem używać 7.0 jako wersję tds.
Testowanie FreeTDS nie jest zbyt trudne:
[email protected]:~$ sqsh -S ACUMENSERVER -U username -P password
sqsh: Symbol `_XmStrings' has different size in shared object, consider re-linking
sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray
This is free software with ABSOLUTELY NO WARRANTY
For more information type '\warranty'
1> use acumen
2> go
1> select top 1 firstname, lastname from tblClients
2> go
[record returned]
(1 row affected)
1> quit
Następna w kolejce jest to konieczne, aby skonfigurować ODBC:
[email protected]:/etc$ cat odbcinst.ini
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
[email protected]:/etc$ cat odbc.ini
[ACUMENSERVER]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = ACUMENSERVER
Database = ACUMEN
I następnie testowane połączenie z isql:
[email protected]:~$ isql -v ACUMENSERVER username password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> use ACUMEN
[][unixODBC][FreeTDS][SQL Server]Changed database context to 'Acumen'.
[ISQL]INFO: SQLExecute returned SQL_SUCCESS_WITH_INFO
SQLRowCount returns -1
SQL> select top 1 firstname from tblClients;
[record returned]
SQLRowCount returns 1
1 rows fetched
SQL> quit
OK, więc mamy ODBC używający FreeTDS do połączenia ze zdalnym serwerem MSSQL. Pozostało tylko dodać Ruby do miksu.
[email protected]:~$ sudo aptitude install libdbd-odbc-ruby
Ostatnią rzeczą do sprawdzenia jest to, że Ruby można użyć DBI i ODBC uderzy rzeczywistej bazy danych, a to jest łatwe do testu:
[email protected]:~$ irb
irb(main):001:0> require "dbi"
=> true
irb(main):002:0> dbh = DBI.connect('dbi:ODBC:ACUMENSERVER', 'username', 'password')
=> #<DBI::DatabaseHandle:0xb7ac57f8 @handle=#<DBI::DBD::ODBC::Database:0xb7ac5744
@handle=#<odbc::database:0xb7ac576c>, @attr={}>, @trace_output=#</odbc::database:0xb7ac576c><io:0xb7cbff54>,
@trace_mode=2>
irb(main):003:0> quit
i bardziej kompletny test (tylko z SQL SELECT, przeszkadza ci):
#!/usr/bin/env ruby
require 'dbi'
db = DBI.connect('dbi:ODBC:ACUMENSERVER', 'username', 'password')
select = db.prepare('SELECT TOP 10 firstname FROM tblClients')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
</io:0xb7cbff54>
Stąd (naprawić lib odbc będąc w niewłaściwym miejscu): http://ubuntuforums.org/showthread.php?t=433435&page=2
libtdsodbc.so
with freeTDS (freetds-dev, tdsodbc), you can either edit the path in the odbcinst.ini file for the [FreeTDS] driver section OR cp the /usr/lib/odbc/libtdsodbc.so into /usr/lib/libtdsodbc.so.
albo sposób działa przy dostępie MSSQL z wiersza
isql -v $dsn $user $passwd
Znalazłem to być użyteczne
http://www.unixodbc.org/doc/FreeTDS.html#Configuration
A następnie w pliku database.yml:
development:
adapter: sqlserver
mode: odbc
dsn: dsn_name
username: my_username
password: my_password
To są ste ps skompilowałem dla Centos 5.3. Zajęło mi wiele prób i błędów, aby to zadziałało. To z całkowicie czystej instalacji Centos.
Install EPEL:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
zainstalować Ruby RubyGems, FreeTDS, unixodbc, narzędzi programistycznych:
yum install gcc
yum install freetds
yum install ruby-devel
yum install unixODBC-devel
yum install ruby rubygems
zainstalować poręcze:
gem install rails
Install DB związane perełki:
gem install dbd-odbc
gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com
Pobierz zbudować i zainstalować ruby-ODBC:
wget http://www.ch-werner.de/rubyodbc/ruby-odbc-0.9997.tar.gz
tar zxvf ruby-odbc-0.9997.tar.gz
cd ruby-odbc-0.9997
ruby extconf.rb
make
make install
Ostateczna lista GEM:
# gem list
*** LOCAL GEMS ***
actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
dbd-odbc (0.2.4)
dbi (0.4.1)
deprecated (2.0.1)
rails (2.3.2)
rails-sqlserver-2000-2005-adapter (2.2.17)
rake (0.8.7)
Można użyć różnych narzędzi, takich jak isql aby przetestować połączenie ODBC. Brian's post opisuje to szczegółowo, więc nie powtórzę. W szynach trzeba database.yml, który wygląda mniej więcej tak:
development:
adapter: sqlserver
mode: odbc
dsn: dsnName
username: username
password: password
na Ubuntu używam FreeTDS i gem activerecord-sqlserver-adaptera.
Można zainstalować FreeTDS przez apt:
sudo apt-get install freetds
i dodać do swojej Gemfile:
gem 'activerecord-sqlserver-adapter'
musiałem zmienić skonfigurowaną FreeTDS numer wersji w /etc/freetds/freetds.conf
do 8.0
w celu uzyskania rzeczy działa poprawnie.
[global]
tds version = 8.0
- 1. Łączenie się z serwerem TCP/IP za pomocą skryptu php
- 2. Łączenie się z serwerem Microsoft SQL przy użyciu Pythona
- 3. Jak zsynchronizować dane Sqlite z serwerem sql za pomocą Cordova
- 4. Połącz się z serwerem SQL za pomocą programu Power Shell
- 5. Łączenie ze zdalnym serwerem Microsoft SQL z Node.js
- 6. Łączenie z serwerem H2 z DbVisualizer
- 7. Konfiguracja Liquibase z serwerem MS-SQL
- 8. łączenie serwera MSSQL za pomocą MySQL Workbench
- 9. łączenie OPEN API z neutralnym serwerem
- 10. Łączenie ASP.NET MVC4 z serwerem Twitter Bootstrap
- 11. Łączenie emacsa z serwerem zdalnego sprawdzania zabezpieczeń
- 12. Rails 4, surowe zapytanie za pomocą ActiveRecord
- 13. Łączenie Java z SQL?
- 14. Połącz się z serwerem SQL za pomocą PDO przy użyciu sterownika SQL Server
- 15. Jak połączyć się z serwerem SQL za pośrednictwem serwera proxy
- 16. Dostęp połączony z serwerem SQL
- 17. Łączenie ActiveRecord :: Relacje zapytane przez skojarzenie polimorficzne
- 18. Łączenie się z serwerem GCM działającym na lokalnym serwerze
- 19. SSH z serwerem za firewallem
- 20. ActiveRecord zrywać do SQL
- 21. Jak mogę połączyć się z serwerem SQL za pomocą zintegrowanego zabezpieczenia ze sterownikiem JDBC?
- 22. Czy mogę połączyć się z serwerem Microsoft SQL Server za pomocą MySQL Workbench
- 23. jak połączyć się z serwerem SQL za pomocą SQuirreL SQL z domeny systemu Linux bez rejestracji domeny?
- 24. Jaki jest najlepszy sposób komunikacji z serwerem za pomocą PhoneGap?
- 25. Nie można połączyć się z serwerem za pomocą rtmfp
- 26. Połączenie z serwerem SQL localdb JDBC
- 27. Dodaj kolumnę zer z serwerem sql tabeli
- 28. Łączenie ciągów znaków za pomocą log4net
- 29. Wynik z ActiveRecord :: Base.connection.execute (sql) - PostgreSQL