5

rubyアプリケーション(Railsではありません)を作りたいです。これは、一部のデータを保持する必要があるコンソール アプリです。データベースとして pstore を使用しています。このアプリケーションを gem としてデプロイしたいと考えています。

私の質問は、私のデータはどこにあるのですか?

現在、標準の gem レイアウトで bin ディレクトリの兄弟として data ディレクトリを作成しました。したがって、gem がデプロイされた後、gem がそのデータを「内部に」保存することを期待します。しかし、テストのためにローカルの gem インストールを行うと、データが gems ディレクトリ内のどこかにではなく、プロジェクト ファイルにローカルに保存されていることがわかりました。

もちろん、「rake install_gem」が何をしているのかを単純に誤解している可能性もあります。また、gem をインストールするために sudo が必要な場合、gem ディレクトリに「それ自体の内部」でデータ ファイルを実際に作成できるのではないかと漠然と心配しています。

誰かがこれを少し明確にすることができますか?

ありがとうございました。ジョン・シャンク

@makevoid - 返信ありがとうございます。これが私のメインスクリプトの全体です。/binディレクトリ内...(コメント内のコンテンツをフォーマットする方法に慣れていないため、メインの質問に追加しました-貼り付けられたコードはひどく見えました.

#!/usr/bin/env ruby

$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'

require 'timesheet'

begin
  command_hash = TimesheetParser.parse
  store = YAML::Store.new("data/time_entries.yaml")
  tl = TimeLog.new(store)
  ts = Timesheet.new(tl)
  ts.process(command_hash)
rescue Exception => e
  raise if command_hash[:debug]
  puts e.message
4

2 に答える 2

11

Linux では、変数データの保存に一般的に使用される場所が 2 つあります。

/home/user/.application

すべてのユーザーが独自のストレージを必要とする場合、これは通常、ユーザーのホーム ディレクトリで行われます。ユーザーのホーム ディレクトリ内のストレージのパスは、次のようにする必要があります。

ENV["HOME"] + "/." + $application_name

/var/lib/アプリケーション

すべてのユーザーがストレージを共有する場合、またはアプリケーションが 1 人のユーザー (ほとんどのデーモン) のみによって実行されることを意図している場合、/var はあらゆる種類のデータを格納するのに適した場所です。

  • /var/logログ用
  • /var/runpid の場合
  • /var/lockロックファイル用
  • /var/wwwhttpサーバー用
  • /var/tmp重要ではないが永続的なデータ用
  • /var/lib他のすべてのデータ

/var 内のストレージのパスは次のようになります。

"/var/lib/" + $application_name

このディレクトリのアクセス許可が、アプリケーションをルートとして実行する必要がないものであることを確認してください。

于 2010-01-02T15:18:21.250 に答える
0

gem ディレクトリ内にデータを保存したくないことは間違いありません。予想される動作は、ユーザーが gem を問題なくアンインストールおよび再インストールできることです。gem のインストール ディレクトリにデータがある場合、gem をアンインストールするとそのデータが破壊され、ユーザーを怒らせます。

johannes は、Linux で使用するための適切なアイデアを持っています。Mac の場合、特定のディレクトリは少し異なります。同じことがWindowsにも当てはまります。ターゲットにする各プラットフォームの適切な場所を調査し、コードが実行されるホストの種類に応じて、条件付きでストレージの場所を切り替えるコードを作成する必要があります。

ユーザーがデフォルトを上書きできるようにすることを忘れないでください。それを行う方法は、彼らをとても幸せにするでしょう:)

于 2010-01-02T22:02:29.220 に答える