next-l/enju_leaf

1.3.5 から 1.4.8 へのデータ移行

Closed this issue · 34 comments

Enju Leaf 1.3.5 を 1.3.6 にアップグレードしたところ起動しなくなったため、1.3.6 での運用は断念し、Docker版の Enju Leaf 1.4.x に移行することにしました。

基本的にインストール方法に従いますが、データベースについては新規作成するわけにはいかないため、ホストマシンの PostgreSQL に移行したデータベースを使います。データベース名は、これまでの enju_leaf_13_production から、1.4以降の標準的な命名に従い enju_leaf_production に変更してあります。

さて、インストール方法によれば、

データベースを作成し、初期データを投入します。 1.4系では以下のコマンドを実行してください。

$ docker compose up -d
$ docker compose run --rm web bin/rake db:create
$ docker compose run --rm web bin/rake db:migrate
$ docker compose run --rm web bin/rake db:seed

とありますが、これは新規のデータベース作成を前提としているように思います。

私のように、1.3.5 で蓄積した大量のデータを移行して 1.4.x で使いたい場合、どのようにすればよいかご教示ください。よろしくお願いいたします。

@miyatatk アップデート手順は以下にあります。
https://github.com/next-l/enju_leaf/wiki/Update-to-1.4

まず、PostgreSQLのバックアップを取得する必要があります。

pg_dump -h localhost enju_leaf_13_production > enju_leaf_13_production_dump.sql

ただし、1.4系のdocker-compose.ymlで指定しているPostgreSQLは13のため、現在お使いのPostgreSQLのバージョンが14以降の場合、コンテナの設定を上書きする必要があります。docker-compose.override.ymlを用意し、

cp docker-compose.override.example.yml docker-compose.override.yml

PostgreSQLの設定を追記してください。

services:
  # 中略
  # 以下の2行を追記
  postgres:
    image: postgres:15 # お使いのバージョンを指定

上記は最新の1.4系のソースコードを取得して実行してください。

cd enju_leaf
git pull

@nabeta お返事ありがとうございます。現在、コンテナ作成前の初期設定を行っているところです。

1つ教えてください。

  • enju_nii: CiNii Booksからの書誌データインポート機能
  • enju_loc: アメリカ議会図書館からの書誌データインポート機能

上記2つの機能を追加するため、1.3.5 では Gemfile への追記を行っていました。

# Gemfile
gem 'enju_nii', '~> 0.3.2'
gem 'enju_loc', '~> 0.3.1'

1.4.7 の Gemfile を見るとEnju関連の記載がないようですが、上記モジュールの追加はどこで定義したらよいでしょうか。

@miyatatk 1.4系ではenju_niiとenju_locは同梱されていますので、追加の必要はありません。

@miyatatk 1.4系ではenju_niiとenju_locは同梱されていますので、追加の必要はありません。

ありがとうございます。それは助かります。

@nabeta docker-compose.yml の中でDockerイメージuclalibrary/cantaloupe:5.0.6-4を使用していますが、私のホストマシンのハードウェアプラットフォームはlinux/arm64のため、プラットフォーム不一致でエラーが出ます。

linux/arm64に対応した代替イメージはありますでしょうか。islandora/cantaloupelinux/arm64に対応していますが、バージョン番号が3.xとあります。

あるいは、下記のように https://github.com/medusa-project/cantaloupe/releases/download/v5.0.6/Cantaloupe-5.0.6.zip からダウンロードする方法もあるようですが、docker compose でうまくインストールできません。

良い解決方法があればご教示ください。

# Dockerfile.cantaloupe

FROM openjdk:11-jre-slim AS cantaloupe

RUN apt-get update && apt-get install -y \
    curl \
    unzip \
    && rm -rf /var/lib/apt/lists/*

ARG UID=1000
ARG GID=1000

USER ${UID}
RUN curl -L -o /tmp/cantaloupe.zip https://github.com/medusa-project/cantaloupe/releases/download/v5.0.6/Cantaloupe-5.0.6.zip && \
    unzip /tmp/cantaloupe.zip -d /opt && \
    chown -R ${UID}:${GID} /opt/Cantaloupe-5.0.6 && \
    rm /tmp/cantaloupe.zip

ENV CANTALOUPE_HOME /opt/Cantaloupe-5.0.6
ENV PATH $CANTALOUPE_HOME:$PATH

EXPOSE 8182

CMD ["cantaloupe"]
# docker-compose.yml

services:

  cantaloupe:
    platform: linux/arm64
#    image: uclalibrary/cantaloupe:5.0.6-4
    build:
      context: .
      dockerfile: ./Dockerfile.cantaloupe
    expose:
      - 8182
    restart: always
    environment:
      no_proxy: localhost,web
      SOURCE_STATIC: HttpSource
      HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_PREFIX: http://web:3000/picture_files/
      HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_SUFFIX: '.download?size=original'
      ENDPOINT_API_ENABLED: 'true'
      BASE_URI: ${CANTALOUPE_BASE_URI}
    networks:
      internal:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8182/health"]
      interval: 30s
      timeout: 20s
      retries: 3

@miyatatk #1900 で、CantaloupeのイメージをARM版のあるislandora/cantaloupeに変更しました。git pullで最新のコードを取得した後、.envに以下の変更を追加してください。

# CANTALOUPE_BASE_URIを削除
CANTALOUPE_BASE_URL=http://localhost:8182

islandora/cantaloupeはlinux/arm64に対応していますが、バージョン番号が3.xとあります。

Islandoraプロジェクトでは、Cantaloupeだけでなくその他のソフトウェアを一括で管理しており、ここでのバージョン3というのはそれを指しているようです、
https://github.com/Islandora-Devops/isle-buildkit/releases

Dockerイメージのドキュメントには5.0.6を使用しているとあり、Dockerfileもそうなっています。
https://registry.hub.docker.com/r/islandora/cantaloupe
https://github.com/Islandora-Devops/isle-buildkit/blob/main/cantaloupe/Dockerfile

@nabeta 迅速なご対応をありがとうございます。

とりあえず、docker-compose.ymlの該当箇所を次のように直したところ、docker compose builddocker compose up -dは無事エラーなく通るようになりました。他のコードの修正をお待ちしております。

# docker-compose.yml

services:
  cantaloupe:
    # ホストマシンのプラットフォームに合わせる
    platform: linux/arm64
#    image: uclalibrary/cantaloupe:5.0.6-4
    image: islandora/cantaloupe:3
    expose:
      - 8182
    restart: always
    environment:
      no_proxy: localhost,web
#      SOURCE_STATIC: HttpSource
#      HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_PREFIX: http://web:3000/picture_files/
#      HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_SUFFIX: '.download?size=original'
#      ENDPOINT_API_ENABLED: 'true'
#      BASE_URI: ${CANTALOUPE_BASE_URI}
      CANTALOUPE_HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_PREFIX: http://web:3000/picture_files/
      CANTALOUPE_HTTPSOURCE_BASICLOOKUPSTRATEGY_URL_SUFFIX: .download?size=original
    networks:
      internal:
    healthcheck:
#      test: ["CMD", "curl", "-f", "http://localhost:8182/health"]
      test: ["CMD-SHELL", "curl -f http://cantaloupe:8182/iiif/3"]
      interval: 30s
      timeout: 20s
      retries: 3

docker compose up -d はエラーなく通りますが、起動後にWebサーバーにアクセスすると、以下のようになります。原因が分かりましたらご教示ください。(直接関係ありませんが、PostgreSQLのデータは移行済みです。)

$ curl -I http://localhost:3000
curl: (7) Failed to connect to localhost port 3000: 接続を拒否されました

@miyatatk webコンテナが使用する3000番ポートには、Dockerのネットワーク内からしかアクセスできません。コンテナの外(Webブラウザなど)からアクセスするには http://localhost:8080 を開いてください。

@nabeta 8080でしたか。8080は別のアプリが使用しているので、これを変えるにはどこの設定を変えればいいですか。

@miyatatk webコンテナが使用する3000番ポートには、Dockerのネットワーク内からしかアクセスできません。コンテナの外(Webブラウザなど)からアクセスするには http://localhost:8080 を開いてください。

@miyatatk 以下の内容でdocker-compose.override.ymlを作ると、 http://localhost:8180 で起動するようになります。

services:
  nginx:
    ports: !override
      - ${ENJU_LEAF_BIND_ADDRESS}:8180:80
      - ${ENJU_LEAF_BIND_ADDRESS}:8182:8182

@nabeta すみません、NGINXはコンテナ内ではなくホストマシンのものを使っています。(docker-compose.ymlnginx: 部分は全て #でコメントアウトしています。)

また、現時点ではNGINXのEnjuに関する設定はしていません。

したがって、DockerのEnjuネイティブのWebサーバーにアクセスできるはずなのですが、それは3000番ではないのですね。80番でしょうか。

@miyatatk 以下の内容でdocker-compose.override.ymlを作ってください。

services:
  web:
    ports:
      - 127.0.0.1:3000:3000

@nabeta やってみました。前回は「接続を拒否されました」と出ていましたが、今回は違います。

$ curl -I http://localhost:3000
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=UTF-8
X-Request-Id: 4f82f26e-5479-4edb-a7b5-c4b194c878d0
X-Runtime: 0.166615
Content-Length: 1635

ブラウザーでアクセスすると、

We're sorry, but something went wrong.
If you are the application owner check the logs for more information.

と表示されます。ログファイルはこんな感じです。

web-1  | [cf0b901b-81ab-44b7-9489-291da6a1e31c]   
web-1  | [cf0b901b-81ab-44b7-9489-291da6a1e31c] app/controllers/page_controller.rb:32:in `index'
web-1  | I, [2024-08-20T00:25:14.538065 #1]  INFO -- : [ba799ab7-39f4-49fd-9443-cf7a201a9f89] Started GET "/favicon.ico" for 192.168.xx.xx at 2024-08-20 00:25:14 +0900
web-1  | F, [2024-08-20T00:25:14.540051 #1] FATAL -- : [ba799ab7-39f4-49fd-9443-cf7a201a9f89]   
web-1  | [ba799ab7-39f4-49fd-9443-cf7a201a9f89] ActionController::RoutingError (No route matches [GET] "/favicon.ico"):
web-1  | [ba799ab7-39f4-49fd-9443-cf7a201a9f89]   
web-1  | I, [2024-08-20T00:30:43.250785 #1]  INFO -- : [31dd6579-784f-4bd8-a953-f6558825596e] Started GET "/" for 192.168.xx.xx at 2024-08-20 00:30:43 +0900
web-1  | I, [2024-08-20T00:30:43.253939 #1]  INFO -- : [31dd6579-784f-4bd8-a953-f6558825596e] Processing by PageController#index as HTML
web-1  | I, [2024-08-20T00:30:43.267763 #1]  INFO -- : [31dd6579-784f-4bd8-a953-f6558825596e] Completed 500 Internal Server Error in 14ms (ActiveRecord: 3.1ms | Allocations: 1264)
web-1  | F, [2024-08-20T00:30:43.270258 #1] FATAL -- : [31dd6579-784f-4bd8-a953-f6558825596e]   
web-1  | [31dd6579-784f-4bd8-a953-f6558825596e] ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  リレーション"bookmarks"は存在しません
web-1  | LINE 8:  WHERE a.attrelid = '"bookmarks"'::regclass
web-1  |                             ^
web-1  | ):
web-1  | [31dd6579-784f-4bd8-a953-f6558825596e]   
web-1  | [31dd6579-784f-4bd8-a953-f6558825596e] app/controllers/page_controller.rb:32:in `index'

@miyatatk アップデート手順のうち、以下のコマンドは実行していますでしょうか。

docker compose run --rm web bin/rake enju_leaf:backfill_migration_versions
docker compose run --rm web bin/rake db:migrate

これらのコマンドを実行していて引き続き同じエラーが出る場合、以下のコマンドを実行すると、どのようになりますでしょうか。

# PostgreSQLのパスワードをたずねられるので入力すること
docker compose run --rm web psql enju_leaf_production -U enju -h postgres
=> DELETE FROM schema_migrations WHERE version = '55';
=> \q
docker compose run --rm web bin/rake db:migrate

@nabeta ありがとうございます。

いいえ、マイグレーションは怖くてまだやっていません(笑)。マイグレーションをしないと画面表示もされないわけですね。

後ほど試してみます。

@nabeta ありがとうございます。おかげさまで、無事マイグレーションに成功し、Enju Leaf 1.4.8 の Webサーバーが表示するようになりました。1.3.5 のデータは全て移行できたようです。

しかしながら、ブラウザでWebサイトを見ると、スタイルシートが無効になっているのか白地にむき出しの文字のページが表示されています。画像も見ることができません。すみませんが、解決方法を教えてください。

$ curl -I http://localhost:3000

HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: text/html; charset=utf-8
Link: </assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css>; rel=preload; as=style; nopush,</assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css>; rel=preload; as=style; nopush,</assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js>; rel=preload; as=script; nopush,</packs/js/application-797b32cf759051a1c429.js>; rel=preload; as=script; nopush
Vary: Accept
ETag: W/"f59fadaa2eebf87291c0196bec62c405"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _enju_leaf_session=MbSZmVP9J%2FqgQM8NzIaHJdCuYh2DOBEWNRC0XpQfIAX8wFX4cXlYhQnrYvl6BFG9pBHg7q4818WwQ2boa2l7EtdfLrw05qEWvzxqDrQre5TrTGN5x%2FwysIRfffgG%2BlD1fuF42Lgmtyj%2Fx1i%2BmGyRFKBM%2BtKek3LQd00ktqocCZJAK1rMuIMq6dGTA9ecw%2BJLLe3z5BGTK0WHVjJ1p0os5utdbf600ej6C%2FyZh7sQ4Mm8fgUy19aqsvujy%2FQQlmSt7tN04pjrp4wcF2sP3unGJ2OYj1l7KqARoSnWPHgwHIsldhYpYLzkVrKvBAvPTA%3D%3D--vUmCy48503pNyaoY--O2HAfbl6Iu%2F55nFTz%2BiDSg%3D%3D; path=/; HttpOnly; SameSite=Lax
X-Request-Id: 8896f767-ca00-4390-abb3-9d341d5811fb
X-Runtime: 1.187623

@miyatatk CSS・JavaScriptの作成を行い、コンテナを再起動してください。

docker compose run --rm web yarn install
docker compose run --rm web bin/rake assets:precompile

Solrのインデックスの作成もあわせて実行してください。

docker compose run --rm web bin/rake sunspot:reindex

@nabeta もちろん、マニュアルに従って3つのコマンドは実行しました。コンテナも再起動しています。その後に上記の状態になりました。

# SolrのインデックスとJavaScript・CSSを再作成します。

$ docker compose run --rm web bin/rake sunspot:reindex
$ docker compose run --rm web yarn install
$ docker compose run --rm web bin/rake assets:precompile
# Enjuを停止して再起動します。

$ docker compose down
$ docker compose up -d

@miyatatk http://localhost:3000 を開いたときの表示はどうなっていますか。

@miyatatk http://localhost:3000 を開いたときの表示はどうなっていますか。

localhost(サーバー機)のGUIを立ち上げてブラウザーで開いても、同様にテキスト表示になります。

先ほどのはサーバー機とは異なるマシンのブラウザーで見た状態ですが、同じ画面になりました。

@nabeta *.css と *.js に関するRoutingErrorがあるようです。関係ありますか。

$ docker compose logs -f web | grep Error
web-1  | /usr/local/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
web-1  | /usr/local/bundle/gems/net-protocol-0.2.2/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
web-1  | [1394abb1-ac6f-4f97-940f-6c8a80b5bebf] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [391cdbe8-ee18-4b73-82a9-61ee13b5b60f] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [1f3aaf7a-a7fb-452f-a9a1-d629639fa9d8] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [81689e49-6639-4931-bdd9-a1cd9d584cd1] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [80e8bdb4-e070-4de4-bb8a-444d5b338797] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [1e8058ac-e3c9-453c-906c-8edc6f8688b2] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [226d2378-1b5e-4a5e-942f-e1ebea498373] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [927ffa21-227e-4d96-a372-30b361ebcdca] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [c248b845-96f7-4a97-aa4c-6aabb5610c17] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [37763e36-6174-4773-9f11-48de5c13c96b] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [d5875d39-0f01-4a69-be82-0b9646c1811a] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [0d3ca73d-cbe5-4ac4-8ece-3f1b7eed34f1] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [97d608f7-d539-47b1-b02c-b975de449ec2] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [f57ebf83-be27-42aa-a2e4-56c692f80eb0] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [65e57afb-21b3-41a7-9ee1-669fef0dacdb] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [45e90ea5-05ac-48bb-8ec7-88b652349a17] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [e0a7678d-d3f2-42b6-8528-9432cb3200f6] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [a1961b92-def3-44fc-8bd7-aa65aad617a0] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [5457015d-a44e-4add-90e1-7cc1e0dc241b] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [bd8a2dbc-6aa4-4235-9878-8a116145dda6] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [84286f79-f0b5-4b3c-a4b2-da3d01a3a5a2] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [f2391d33-a24d-4f96-96c1-e3574a0cdc9d] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [86837cf7-ba9d-4e45-a6f8-f86fee529178] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [ce32f41f-221c-40ba-820f-62a0b745ee81] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [43bae8e3-2a37-465e-baa9-aadaa6550e78] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [bff4f1ac-d555-4687-bfa0-2cdeddec66de] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [2358081e-0426-4e81-8ff5-b1e763b4e448] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [65ee2da8-bf84-41aa-afed-d947f5826178] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [6694e5a9-cf0e-46b8-99b5-d35e2110260e] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [d9cecefd-ce1d-47a0-a6ac-a737774d9002] ActionController::RoutingError (No route matches [GET] "/assets/icons/feed-c6d1b44cf4dd1c7ff5bb18fd28ba8ca8b5fb90bff1fb35e19885ee07058f083b.png"):
web-1  | [9d7c9dda-61b6-43f3-97f6-3635cffa31ba] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [56b2bf3d-4910-4f9d-a1b8-30d037c2de73] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [55198de0-8e52-424b-b4d4-125af9f5daea] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [bbddccc0-b8e9-47f4-ad02-8436cbd00ebe] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [e6268b01-34c7-46a4-8e95-4c5a4031a930] ActionController::RoutingError (No route matches [GET] "/assets/icons/feed-c6d1b44cf4dd1c7ff5bb18fd28ba8ca8b5fb90bff1fb35e19885ee07058f083b.png"):
web-1  | [2f1de329-7e4a-462f-ac80-029a1d98d9b5] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [f18e6f2e-3878-420b-9504-5085a8b3a8d9] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [27c3fe36-d423-4058-84d0-1891dd554d12] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [6fe1aad8-24b9-486c-99d7-91331347ec92] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [1ad5f395-1dae-41b9-ba70-78756fccc113] ActionController::RoutingError (No route matches [GET] "/assets/icons/page_white_text-f18747e6681080fb55737c03028107bb924c2785532965cbadada3aa6e3d4310.png"):
web-1  | [b3cf89e6-647f-4f07-9d2e-98fda437b57e] ActionController::RoutingError (No route matches [GET] "/assets/application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css"):
web-1  | [8af36c71-8a86-4437-9ec8-37f2ad29cc6f] ActionController::RoutingError (No route matches [GET] "/assets/print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css"):
web-1  | [269be145-483e-4da0-9e12-017ff14c7f4c] ActionController::RoutingError (No route matches [GET] "/assets/application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js"):
web-1  | [c2d1b24d-4f9d-40c6-b3c6-b5466b15f45e] ActionController::RoutingError (No route matches [GET] "/packs/js/application-797b32cf759051a1c429.js"):
web-1  | [0daeda35-52ec-4a6d-818e-86c9215ddb7d] ActionController::RoutingError (No route matches [GET] "/favicon.ico"):

@miyatatk public/assets 以下にファイルは作成されていますでしょうか。

ls -l public/assets

@miyatatk nginxが別立てでしたね。お使いのnginxで、以下が設定されていることを確認していただけますか。

  # 実際の enju_leaf/public ディレクトリのパスに変更すること
  root /opt/enju_leaf/public;

  location @web {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:3000;
  }

  # 上記のrootで指定したディレクトリにファイルがある場合、
  # それを優先して読み込む
  location / {
    try_files $uri @web;
  }  

@miyatatk public/assets 以下にファイルは作成されていますでしょうか。

ls -l public/assets

@nabeta はい、あります。1.4 のインストール時に作成されたものと思われます。

$ ls -l public/assets/
-rw-r--r-- 1 user user 3488083  8月 20 21:50 application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js
-rw-r--r-- 1 user user  896159  8月 20 21:50 application-26585bfaaf14ecaa4eca91aee6aad59375cae439976747459e96fd0a9b7c2178.js.gz
-rw-r--r-- 1 user user   54477  8月 20 21:50 application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css
-rw-r--r-- 1 user user   11492  8月 20 21:50 application-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css.gz
-rw-r--r-- 1 user user     961  8月 20 21:50 autocomplete_agent-c212b138ebc987e699d56a1029ec37a741124815234d99a150a84ee2a26dfbba.js
-rw-r--r-- 1 user user     446  8月 20 21:50 autocomplete_agent-c212b138ebc987e699d56a1029ec37a741124815234d99a150a84ee2a26dfbba.js.gz
-rw-r--r-- 1 user user     112  8月 20 21:50 border-7f543f72a6643f4f77d4f8035a582568d2a49c4f85217b8c3787ea1fb1c57fa3.png
-rw-r--r-- 1 user user   21838  8月 20 21:50 cable-405b9eaa96e229928daca399c41ed1672fe9b1eb4aea0bbe27306cf68f4f829e.js
-rw-r--r-- 1 user user    4848  8月 20 21:50 cable-405b9eaa96e229928daca399c41ed1672fe9b1eb4aea0bbe27306cf68f4f829e.js.gz
-rw-r--r-- 1 user user    2893  8月 20 21:50 controls-0ef8ac82119e09c93351b7f070bb788a15e68daede870ef81efa36f927f1aa35.png
-rw-r--r-- 1 user user    5828  8月 20 21:50 enju-e8b76ce80e00125617da59fa832c09efda0b1e38cf99dd29974a9f6dc12322d3.css
-rw-r--r-- 1 user user    1665  8月 20 21:50 enju-e8b76ce80e00125617da59fa832c09efda0b1e38cf99dd29974a9f6dc12322d3.css.gz
drwxr-xr-x 2 user user    4096  8月 20 21:50 enju_leaf
-rw-r--r-- 1 user user 3200618  8月 20 21:50 enju_leaf-1caac230f9575991ef408c2cc8e5cb75746efdbc2ee985fba626230ca5af4f49.js
-rw-r--r-- 1 user user  814664  8月 20 21:50 enju_leaf-1caac230f9575991ef408c2cc8e5cb75746efdbc2ee985fba626230ca5af4f49.js.gz
-rw-r--r-- 1 user user   54477  8月 20 21:50 enju_leaf-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css
-rw-r--r-- 1 user user   11492  8月 20 21:50 enju_leaf-87ecf9d39f7d1e851a836a50383ed615b25ffd326bdbcd0d63610031d1fb9a42.css.gz
-rw-r--r-- 1 user user      39  8月 20 21:50 enju_mobile-6f6c33865a7c10997062b60b627bad48d99d0ab54b38eb49d9e3aae3163c4458.css
-rw-r--r-- 1 user user      59  8月 20 21:50 enju_mobile-6f6c33865a7c10997062b60b627bad48d99d0ab54b38eb49d9e3aae3163c4458.css.gz
-rw-r--r-- 1 user user     149  8月 20 21:50 enju_print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css
-rw-r--r-- 1 user user     132  8月 20 21:50 enju_print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css.gz
drwxr-xr-x 2 user user   12288  8月 20 21:50 icons
drwxr-xr-x 2 user user    4096  8月 20 21:50 images
drwxr-xr-x 2 user user    4096  8月 20 21:50 jquery-ui
-rw-r--r-- 1 user user    9427  8月 20 21:50 loading-d009e70718c057b2b89288415a3c596240fe5578ecd54e00f8212364218ad10d.gif
-rw-r--r-- 1 user user     157  8月 20 21:50 loading_background-4c69493ad0c08b18fd96c58125c6acfe1afa442b6c0ea4d11308613b9327566f.png
-rw-r--r-- 1 user user       3  8月 20 21:50 manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js
-rw-r--r-- 1 user user      23  8月 20 21:50 manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js.gz
-rw-r--r-- 1 user user     299  8月 20 21:50 menu-9ef1ae37975b5fb428ede4e52ed6b2b413e88d3ec39e8c85b6b4dd94360ed5b8.js
-rw-r--r-- 1 user user     192  8月 20 21:50 menu-9ef1ae37975b5fb428ede4e52ed6b2b413e88d3ec39e8c85b6b4dd94360ed5b8.js.gz
-rw-r--r-- 1 user user      48  8月 20 21:50 mirador-9fd1edbb4d4e9e08888661a695fc344d2b5ca8c2e870bba06047fe89585f6993.css
-rw-r--r-- 1 user user      68  8月 20 21:50 mirador-9fd1edbb4d4e9e08888661a695fc344d2b5ca8c2e870bba06047fe89585f6993.css.gz
-rw-r--r-- 1 user user  208229  8月 20 21:50 mobile-ade342bc1155f4cffd1de03b9b721bb3c9a6a6bd19b43ca41c3750850fb9be33.css
-rw-r--r-- 1 user user   25072  8月 20 21:50 mobile-ade342bc1155f4cffd1de03b9b721bb3c9a6a6bd19b43ca41c3750850fb9be33.css.gz
-rw-r--r-- 1 user user  781719  8月 20 21:50 mobile-dfbc11f998a0a7ad20dffa9bbb7a9758e8827bc32df573d71b7f4b8ed9cb9fd4.js
-rw-r--r-- 1 user user  215162  8月 20 21:50 mobile-dfbc11f998a0a7ad20dffa9bbb7a9758e8827bc32df573d71b7f4b8ed9cb9fd4.js.gz
-rw-r--r-- 1 user user     182  8月 20 21:50 overlay-e4ceb680d9606bbe944fd36e1ccbfe5612d06c1ead6e093d45b2b7c69ddf2565.png
-rw-r--r-- 1 user user    1908  8月 20 21:50 pagination-6f736582f9934c4f8aa3154e4e64c548128e11cc7faf6fc94e93a3b0eae0e2f6.css
-rw-r--r-- 1 user user     629  8月 20 21:50 pagination-6f736582f9934c4f8aa3154e4e64c548128e11cc7faf6fc94e93a3b0eae0e2f6.css.gz
-rw-r--r-- 1 user user    2304  8月 20 21:50 portlets-40dd4c686dace0103d7694cb949e00a2345d063df71ac80e9e06b089edfc78b3.js
-rw-r--r-- 1 user user     875  8月 20 21:50 portlets-40dd4c686dace0103d7694cb949e00a2345d063df71ac80e9e06b089edfc78b3.js.gz
-rw-r--r-- 1 user user     395  8月 20 21:50 portlets-43dc671773346c0c7a51513f33f9e41c94976df4948cf1e0cc6b4d31c2113bff.css
-rw-r--r-- 1 user user     234  8月 20 21:50 portlets-43dc671773346c0c7a51513f33f9e41c94976df4948cf1e0cc6b4d31c2113bff.css.gz
-rw-r--r-- 1 user user     149  8月 20 21:50 print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css
-rw-r--r-- 1 user user     132  8月 20 21:50 print-ef63e524306e6a3f5c6891b81bd63c3fba1853f4dddfeba6620548b95ce1919c.css.gz
-rw-r--r-- 1 user user    6646  8月 20 21:50 rails-cd95a25e70dfe61add5a96e11d3fee0f29e9ba2b05099723d57bba7dfa725c8a.png
-rw-r--r-- 1 user user     705  8月 20 21:50 scaffold_modified-7140bf10c6da572691798abdd187c7befe3ff396799ab48f7f11e2f3bdc5e7d6.css
-rw-r--r-- 1 user user     371  8月 20 21:50 scaffold_modified-7140bf10c6da572691798abdd187c7befe3ff396799ab48f7f11e2f3bdc5e7d6.css.gz
-rw-r--r-- 1 user user     210  8月 20 21:50 select_locale-b89c7bd65f01f5437144e272ee3d7717c213adff80a82d5e0035626839703617.js
-rw-r--r-- 1 user user     128  8月 20 21:50 select_locale-b89c7bd65f01f5437144e272ee3d7717c213adff80a82d5e0035626839703617.js.gz
-rw-r--r-- 1 user user    2037  8月 20 21:50 spinner-8385a8ea9fcf33fd1ad0f9f01f7815bca44e12152ad511281ff29a201c8b4d98.gif
-rw-r--r-- 1 user user    2891  8月 20 21:50 unknown_resource-c82a5e7563f33fd67994cfb12c8b1710e83bde1999cd8a503f09d8fb0120a64d.png

@miyatatk nginxが別立てでしたね。お使いのnginxで、以下が設定されていることを確認していただけますか。

  # 実際の enju_leaf/public ディレクトリのパス
  root /opt/enju_leaf/public;

  location @web {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:3000;
  }

  # 上記のrootで指定したディレクトリにファイルがある場合、
  # それを優先して読み込む
  location / {
    try_files $uri @web;
  }  

NGINXは別立てですが、現段階ではまだ関連付けていません。別のアプリとして動いていますし、干渉はしていないはずです。

それにしても、公開の際のルートディレクトリは public なのですね。

@miyatatk #1892 (comment) のとおり、他のサーバと干渉しないポートで、Dockerでのnginxを起動してみてください。

http://localhost:3000/ を開いたときの表示はどうなっていますか。

と書いたのですが、現在の1.4系の設定では、nginx経由でないとCSSなどを読み込めないようになっています。nginxを経由せずにCSSなどを読み込めるようにするには、.envに以下の設定を追加してください。

RAILS_SERVE_STATIC_FILES=true

@miyatatk #1892 (comment) のとおり、他のサーバと干渉しないポートで、Dockerでのnginxを起動してみてください。

DockerにはNGINXがないので、テストのためとはいえ、改めてインストールしないとできません。環境を整えなければならないので、ちょっとすぐには難しいです。

@miyatatk #1892 (comment) でコメントアウトしたものを戻せばよさそうですが(ポート番号は適宜変えてください)、別の問題がありますでしょうか。

@nabeta 素晴らしいです! RAILS_SERVE_STATIC_FILES=true はもともと.env.templateではコメントアウトされていますが、コメントを外してこれをtrueに変えたところ、NGINXなしで、スタイル・画像を含めて正しく表示されました。久しぶりに見る、見慣れたEnju Leafの画面です。

これでEnju単体での動作を確認できましたので、近日中にホストマシンにインストールされたNGINXにEnjuサイトを設定し、正しくSSLで表示されるようにしたいと思います。

ありがとうございました。

@miyatatk #1892 (comment) でコメントアウトしたものを戻せばよさそうですが(ポート番号は適宜変えてください)、別の問題がありますでしょうか。

このホストマシンは複数のWebアプリケーションを動かしているサーバーであり、ホストにインストールされたNGINXで一元的にWebサーバーへのアクセスを振り分けています。他のアプリと慎重に調整しないとトラブルの原因になることがあります。

@miyatatk 無事にアップデートが完了できたようでよかったです! Docker版はアップデートも構成変更も行いやすくなっていますので、その点でも移行できてよかったです。

#1889 とあわせてクローズします。