Heroku ライブラリの問題
概要
Ruby on Rails プロジェクトを持ち込まれました。 Ruby についてはまったくわかりませんが、コードを変更する必要はありません。問題は図書館です。 Windows で生成されたため、Heraku が Heroku Removing Gemfile.lock を案内してくれたというエラーが発生しました。これは私が期待していたほど役に立ちませんでした。 Gemfile には、回答で言及されているライブラリへの参照が含まれていませんでした。私は Windows に関連している可能性があるものを見つけようと試み始めました。ただし、ファイルには何も追加せず、バージョン番号を更新しただけです。私が使用していた Gemfile は Heroku のプロジェクトから直接取得したものです。 Windows 関連のものがどのように追加されたのかわかりません。とにかく、何を求めているのか全く分かりません。 Heroku が好まない Gemfile は次のとおりです。
ruby '3.2.2'
source 'https://rubygems.org'
gem 'bundler', '>= 2.4.10'
gem 'rails', '7.0.5'
gem 'coffee-rails', '~> 5.0.0'
group :production, :staging do
gem 'rails_12factor'
end
gem 'skylight', '~> 5.3.4'
gem 'newrelic_rpm'
gem 'puma'
gem 'pg'
gem 'sass-rails', '~> 6.0.0'
gem 'font-awesome-rails'
gem 'bootstrap-sass'
gem 'bootstrap-datepicker-rails'
gem 'bootstrap-will_paginate'
gem 'twitter-bootstrap-rails-confirm', '~> 2.0.2'
gem 'chartjs-ror', '~> 3.7.0' # git: 'git://github.com/paulstefanort/chartjs-ror.git', ref: '3b6184ac39'
gem 'jquery-datatables-rails', '~> 3.4.0'
gem 'jquery-ui-rails'
gem 'local_time'
gem 'devise'
gem 'jwt'
gem 'paperclip'
gem 'aws-sdk', '< 2.0'
gem 'foreman'
gem 'uglifier', '>= 4.2.0'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.11.5'
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 4.2.0'
gem 'spring'
end
gem 'spring-commands-rspec', group: [:development, :test]
gem 'rspec-rails', group: [:development, :test]
group :development do
gem 'sexp_processor'
gem 'flog'
gem 'better_errors'
end
group :test do
gem 'shoulda-matchers', require: false
gem 'guard-rspec'
gem 'simplecov', require: false
gem 'factory_girl_rails'
gem 'faker'
gem 'capybara'
gem 'capybara-webkit'
gem 'rspec-sidekiq'
gem 'database_cleaner'
end
gem 'dotenv-deployment', group: [:development, :test]
gem 'date_validator'
gem 'country_select'
gem 'active_model_serializers'
gem 'mail'
gem 'zbase32', github: 'paulstefanort/zbase32-ruby'
gem 'lol_dba', group: :development
gem 'chosen-rails'
#gem 'chosen-sass-bootstrap-rails', github: 'caarlos0-graveyard/chosen-sass-bootstrap-rails'
gem 'mandrill-rails'
gem 'griddler', '1.5.2'
gem 'griddler-sendgrid', '1.2.0'
gem 'gcm'
gem 'pusher'
gem 'twilio-ruby'
gem 'sidekiq'
gem 'sidekiq-limit_fetch'
gem 'rack-mini-profiler', require: false
gem 'sinatra', require: false
#gem 'quarry', github: 'paulstefanort/quarry'
gem 'keen'
gem 'react-rails', '~> 2.7.1', github: 'reactjs/react-rails'
gem 'airbrake'
#gem 'rbtrace'
gem 'countries'
#gem 'rmagick', '5.2.0'
source 'https://rails-assets.org' do
gem 'rails-assets-react-bootstrap'
end
何を探しているのか、何を変更すればよいのか誰か教えていただけますか?
解決策
Heroku でこのような警告が表示された場合
Removing `Gemfile.lock` because it was generated on Windows.
Bundler will do a full resolve so native gems are handled properly.
This may result in unexpected gem versions being used in your app.
その場合、問題は、Windows でのみ利用可能で他のプラットフォームでは利用できない gem ではない可能性があります。ただし、この gem にはプラットフォーム固有のバージョンが複数あり、Windows バージョンのみがインストールされていました。
たとえば、Ruby on Rails の actiontext ライブラリの推移的な依存関係である nokogri gem があります。この gem の各バージョンには、x86-mingw32、x86-linux、java などの特定のプラットフォーム向けにネイティブにビルドされたさまざまなバージョンがあります。
Bundler がさまざまなプラットフォームで正しいバージョンをロードできるようにするには、Gemfile.lock を生成するときに、どのプラットフォームでアプリを使用するか、およびどの gem バージョンを使用可能にしておくかを Bundler に指示する必要があります。
バンドル プラットフォームで現在どのプラットフォームが構成されているかを確認すると、次のような結果が返される可能性があります。
PLATFORMS
ruby
x86-mingw32
これは、Bundler が gem の Ruby バージョン (基本的にほとんどの gem のデフォルト) と、異なるプラットフォームで複数のバージョンが利用可能な場合に x86-mingw32 バージョンのみをインストールすることを意味します。
しかし、Heraku はプラットフォームを Linux 上で実行しています。したがって、Bundler に x86_64-linux プラットフォームのサポートも追加するように指示する必要があります。それが完了したら、bundle install を再度実行し、変更をコミットして、それらの変更を Heroku にプッシュします。
bundle lock --add-platform ruby # only if `ruby` is not returned by `bundle platform`
bundle lock --add-platform x86_64-linux
bundle install
# git commit and push to Heroku
今後のアプリケーション開発で Windows を使用しない場合は、次のコマンドを使用して Windows を明示的に削除することをお勧めします。
bundle lock --remove-platform x86-mingw32
x86-mingw32 を、bundle platform コマンドによって返された Windows 固有のプラットフォーム文字列に変更する必要がある場合があります。
Apple Silicon で開発する場合、Intel CPU x86_64-darwin を搭載した Mac の場合は、arm64-darwin を追加することもできます。