Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Bundler の使用
      • Rails のサポート
    • Python
      • Python でのバックグランドジョブ
      • Django の使用
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Spring Boot の使用
      • Java の高度なトピック
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • 言語サポート
  • Ruby
  • Windows で生成された Ruby プロジェクトのデプロイ

Windows で生成された Ruby プロジェクトのデプロイ

日本語 — Switch to English

最終更新日 2016年01月06日(水)

Table of Contents

  • 背景: 依存関係の解決
  • lockfile なしでのバンドルインストール
  • 検出
  • 開発と本番のパリティ不整合
  • Gemfile を解決できない
  • 対策

Heroku のスタック​は Linux のディストリビューションで実行されるため、インストールされるすべてのライブラリが Linux 互換である必要があります。Windows マシンで開発している場合、OS 間の依存関係の互換性問題が原因で、Linux へのデプロイ時に問題が発生することがあります。Mac または別の Linux ディストリビューションの開発者には、以下で説明する問題は当てはまりません。

背景: 依存関係の解決

Ruby アプリケーションを開発している場合、Gemfile​ を使用して必要な依存関係を宣言します。bundle install​ を実行すると、すべての依存関係が評価され、解決できるかどうかが確認されます。次に、Bundler により Gemfile.lock​ が作成されます。このファイルには、インストールされた依存関係の正確なバージョンが含まれているため、同じ Gemfile​ と Gemfile.lock​ を別のコンピューター上の誰かに渡して bundle install​ を実行させると、まったく同じバージョンがインストールされます。

一部の gem では、Windows との互換性を維持するために特別なバージョンを作成することを決定しました。Windows マシンで bundle install​ を実行すると、次のような内容が Gemfile.lock​ に含まれている場合があります。

PLATFORMS
  ruby
  x86-mingw32

この x86-mingw32​ 行は、Gemfile​ が Windows マシン上で評価されたことを Bundler に知らせます。mingw​ の部分が mswin​ になっている場合もあります。個別の gem に特別なマーカーが含まれていることにお気付きかもしれません。

sqlite3 (1.3.8-x86-mingw32)

これは、この gem がプラットフォーム x86-mingw32​ または Windows 向けのカスタム版であることを示しています。

Heroku スタックは Linux ベースのため、このタイプの gem は Heroku では実行されません。 この問題のため、以前の Gemfile.lock​ の解決は破棄して、ゼロから bundle install​ を実行する必要があります。

lockfile なしでのバンドルインストール

bundle install​ を実行する前に Gemfile.lock​ が削除されると、ライブラリとそのインストール済みバージョンの履歴がすべて失われます。Bundler のリゾルバーでは、新しい Gemfile.lock​ を再生成して gem をインストールする作業が必要になります。これには、開発コードと本番コードの不整合、そして Gemfile がまったく解決されない可能性という 2 つの問題があります。

検出

Heroku では、Windows 固有の Gemfile.lock​ を検出すると、行に警告を出力します。デプロイ出力に次のような内容が含まれていないか確認してください。

Removing `Gemfile.lock` because it was generated on Windows.

開発と本番のパリティ不整合

Gemfile.lock​ がない場合に、Gemfile に次のような行があるとします。

gem 'rails'

これは、どの​バージョンの Rails をインストールしてもよいことを Bundler に指示しています。ローカルマシンに 3.2.x​ がすでにインストールされていることを検出した場合はそのバージョンを使用する一方、インストール先が同僚のマシンの場合には 4.0.x​ がインストールされるという状況になることがあります。

マシン間で、また開発と本番の間でこのような不整合があると、高確率でエラーが発生します。開発環境で再現できない奇妙な動作が本番環境で発生する場合があります。これを回避して開発と本番のパリティ​を実現するために、Gemfile の内容はできるだけ具体的にしてください。

gem 'rails', '4.0.1'

そうすれば、Gemfile.lock​ がない場合でも Rails 4.0.1 のインストールが保証されます。すべての依存関係に対してこれを行うことは不可能ですが、以上 (>=​) や悲観的ロック (~>​) などの演算子 (なるべく後者) を使用して、gem 要件のスコープを制限することができます。

Gemfile の内容を具体的にすることのマイナス面は、1 つの gem をアップグレードすると gem の解決に失敗する場合があること、また、依存関係のバージョンを手動で宣言する方法を正しく突き止めるのに時間がかかる場合があることです。

Gemfile を解決できない

gem のバージョンがあいまいすぎる場合や、それらのライブラリに循環要件がある場合、依存関係を解決できないのに無限ループで試行し続けるという状態に Bundler が陥る可能性があります。bundle install​ を実行した後、出力が何分間もフリーズしているように見える場合や、..........​ のようにドットの連続が出力される場合は、Gemfile.lock​ が削除されると Gemfile​ を解決できないことの症状である可能性があります。このシナリオでは、Bundler での処理を容易にして検索範囲を絞り込むために、gem バージョンの要件をより具体的にする必要があると考えられます。

対策

Windows で開発するときは、Gemfile の内容をできるだけ具体的にしてください。チームで Windows マシンを使用している開発者が 1 人だけの場合は、その開発者による Gemfile.lock​ の変更をチェックインしないこと、または、デプロイの前に Windows 以外のマシンでバンドルを手動でインストールおよびコミットすることを検討してください。

関連カテゴリー

  • Ruby
スタックしているか、または遅い Ruby プログラムのデバッグ アセット同期を使用しないでください

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences