26

だから私はRVMでサービスとして実行するために薄くしようとしています。その後、 configコマンドを実行するときにを使用するようthin installに手動で更新して、thinがルートではなくローカルユーザーとして実行されるようにしました。ここまでは順調ですね。/etc/init.d/thinsu - user

今、試してみると、sudo service thin startRVM 以外のバージョンの Ruby (最初にボックスにインストールされていた 1.8.7) を使用して実際にコマンドを実行しようとしているように見えます。gem install thinRVM 以外のバージョンで を実行すると、メッセージがuninitialized constant Bundler表示されます。Bundler は RVM gem にのみインストールされ、システム gem にはインストールされません。RVM 環境をセットアップできないようです (RVM 起動スクリプトが ~/.bashrc にあり、それが ~/.bash_profile に含まれているにもかかわらず)。

私がやりたいことは、システム環境ではなく、RVM 環境を使用してサービスとしてシンを実行することだけです。これは可能ですか?あきらめて、すべてをルートとして実行するという究極の罪を犯すべきですか? この時点でとても魅力的です。

助けてくれてありがとう!

4

4 に答える 4

84

RVMには、init.dスクリプトの中間ローダーを作成する便利なラッパージェネレーターが付属しています。これにより、特定のRubyバージョンとgemsetを使用してサービスをロードできます。私はそれを次のように使用します(薄い宝石をインストールした後):

1-シンのinit.dエントリを作成します

sudo thin install 

2-いくつかのデフォルトを設定します

sudo /usr/sbin/update-rc.d -f thin defaults 

3-Railsアプリのブート構成を生成します

sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production

4-rvmラッパースクリプトを生成します

rvm wrapper <rubyversion>@<gemset> bootup thin

5-グローバルジェムセットを使用している場合は、

rvm wrapper ruby-1.9.2-p125 bootup thin

6-thininitを編集します

sudo nano /etc/init.d/thin

7-元のローダーを変更します

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin

8-代わりにrvmラッパーを指す

DAEMON=/usr/local/bin/bootup_thin

9-起動します

sudo service thin start

複数のアプリを実行している場合は、アプリごとにbootconfigymlファイルを生成するだけです。シンを起動すると、/ etc /thin/内のすべてのymlファイルが解析されます。詳細はこちら:

http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb:これはリビジョンにリンクしています。最新バージョンは、空になるように編集されています。URLにが含まれていないリンクを確認することを検討してください?rev=...。現在のバージョンが戻っており、最新の状態になっている可能性があります。

HTH

2013ボーナス編集

私は本番環境でRVMを使用しなくなりましたが、thinは引き続き本番サーバーとして選択されており、上記の手順1〜3を使用して開始します。しかし、それが生成するデフォルトの構成は、いくつかの調整で行うことができます。ここに私のいくつかがあります:

シンが実行するユーザーとグループを次のように設定します。

user: www-data
group: www-data

ポート構成を削除し、代わりにソケットを使用するように切り替えます(少し速く):

# port: 3000
socket: tmp/sockets/<appname>.sock

シンに、インスタンスを1つずつ再起動するように指示します。再起動する前にすべてをシャットダウンするのではなく、次のようにします(ローリングリスタート)。

onebyone: true

サーバープロセスに「タグ」を付けて、それらを識別するのに役立てます(ps auxなど)。

tag: <appname>
于 2010-07-31T04:25:31.687 に答える
22

時間を節約できることを願って 1 つの補遺: Ubuntu は、sudo と環境変数を使用して面白いことを行うことができます。通常の sudo が機能しない場合は、rvmsudo (.rvm/bin 内) を使用します。

rvmsudo thin install

rvmsudo update-rc.d -f thin defaults
于 2011-05-19T03:45:35.827 に答える
5

ruby 1.8.7 myapp1.8.7 の 1 つのアプリと ruby​​ 1.9.2 myapp1.9.2 の別のアプリなど、さまざまな環境でアプリケーションを起動できるように、アプリケーションを薄いサービスにすることをお勧めします。

sudo nano /etc/init.d/myapp1.8.7

元のローダーを保持

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin

スタートケースの場所で

$DAEMON -C /etc/thin/$NAME.yml start

そしてそれを起動します

sudo service myapp1.8.7 start

アプリ myapp1.9.2 でも同じことを行い、混合環境で多くのアプリケーションを個別に実行できます。

sudo service myapp1.9.2 start
于 2011-04-13T15:46:42.393 に答える