4

各 Ruby ファイルの先頭に接続文字列を配置する必要なく、データベースからデータを取得する方法を見つけようとしています。

私は、MSSQL データベースからデータを取得する小さな Sinatra アプリを使って Ruby の基礎を学んでいます。

これまでのところ、各ファイルの上部にある次のコード構造を使用して、MSSQL データベースからのデータを表示するさまざまな単純な erb ページを作成することができました。

<% client = TinyTds::Client.new(:username => 'name', :password => 'password', :dataserver => 'hostname', :database => 'database') %>

<% data = client.execute("SELECT * from tablename") %>

PostgreSQL または MySQL データベースに関係する多くの構成に基づいて見つけた書籍、ガイド、およびオンライン チュートリアルから、接続データ (database.yml ファイルなど) を格納するための中央ファイルを作成する必要があるように思われます。そして、それを私のアプリのどこか/どういうわけか参照します。

各 .erb ファイルが接続文字列を必要としないように main.rb ファイルでそれを行う必要がありますか、それとも各 .erb ファイルでもデータベースを参照する必要がありますか?

次のようなデータベース構成変数の作成への参照に注意しました。

db_config = YAML.load(File.Open("/path_to_file/database.yml")) [ENV['RAILS_ENV']]

しかし、これは明らかに Rails アプリに適しているようです。

私のシナトラ主導の「アプリ」で同様のことをすることはできますか?

ありがとう。

4

1 に答える 1

1

これはうまくいくはずです:

require "sinatra"
require "sinatra/config_file"

config_file 'path/to/config.yml'

DB = TinyTds::Client.new(
  :username => settings.name, 
  :password => settings.password, 
  :dataserver => settings.hostname, 
  :database => settings.database
) 

get '/' do
  @result = DB.do_stuff
  haml :index
end

ただし、TinyTDS をサポートする ORM を探し、それを使用してデータベース接続をセットアップし、クエリを実行することをお勧めします。私はSequelをよく使用し、 TinyTDS をサポートしていることを知っていますが、他の人もそうしていると確信しています。

また、機密情報であるため、ソース管理にチェックインされるファイルにデータベース設定などを入れないことをお勧めします。私はこの種のものを本番用の環境変数に入れ、構成ファイルを使用して開発時に環境変数をロードすることを好みます (便宜上)。上記の例を使用すると、次のようになります。

DB = TinyTds::Client.new(
  :username => ENV["name"],
  :password => ENV["password"],
  :dataserver => ENV["hostname"],
  :database => ENV["database"]
)

これらの環境変数は運用サーバーのメモリに読み込まれるため、セキュリティが少し強化されます。開発のために、Sinatra を起動する前に YAML ファイルをロードし、各値を ENV var に追加します。これが標準的な方法だと言っているわけではありませんが、私のやり方です。

于 2013-05-21T20:30:07.450 に答える