meta-tagsはRuby on Railsのtruncateヘルパーメソッドを最終的に呼び出しますが、このヘルパーメソッドをラップするメソッドを内部に持っています。このラッパーメソッドの引数であるnatural_separatorを省略してのメソッド呼び出しがmeta-tags内に存在し、v2.19.0までは、この省略時のnatural_separatorのデフォルト値がスペース文字であるため、スペース文字のところでの切り詰めが発生しています。
# bin/rails app:update
identical config/boot.rb
exist config
conflict config/application.rb
Overwrite /x/techtips/config/application.rb? (enter "h" for help) [Ynaqdhm] h
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
h - help, show this help
d - diff, show the differences between the old and the new
m - merge, run merge tool
Overwrite /x/techtips/config/application.rb? (enter "h" for help) [Ynaqdhm]
force config/application.rb
identical config/environment.rb
exist config/environments
conflict config/environments/development.rb
Overwrite /x/techtips/config/environments/development.rb? (enter "h" for help) [Ynaqdhm]
force config/environments/development.rb
conflict config/environments/production.rb
Overwrite /x/techtips/config/environments/production.rb? (enter "h" for help) [Ynaqdhm]
force config/environments/production.rb
conflict config/environments/test.rb
Overwrite /x/techtips/config/environments/test.rb? (enter "h" for help) [Ynaqdhm]
force config/environments/test.rb
exist config/initializers
conflict config/initializers/assets.rb
Overwrite /x/techtips/config/initializers/assets.rb? (enter "h" for help) [Ynaqdhm]
force config/initializers/assets.rb
conflict config/initializers/content_security_policy.rb
Overwrite /x/techtips/config/initializers/content_security_policy.rb? (enter "h" for help) [Ynaqdhm]
force config/initializers/content_security_policy.rb
create config/initializers/cors.rb
conflict config/initializers/filter_parameter_logging.rb
Overwrite /x/techtips/config/initializers/filter_parameter_logging.rb? (enter "h" for help) [Ynaqdhm]
force config/initializers/filter_parameter_logging.rb
identical config/initializers/inflections.rb
create config/initializers/new_framework_defaults_7_1.rb
conflict config/initializers/permissions_policy.rb
Overwrite /x/techtips/config/initializers/permissions_policy.rb? (enter "h" for help) [Ynaqdhm]
force config/initializers/permissions_policy.rb
remove config/initializers/cors.rb
exist bin
identical bin/rails
identical bin/rake
conflict bin/setup
Overwrite /x/techtips/bin/setup? (enter "h" for help) [Ynaqdhm]
force bin/setup
rails active_storage:update
Copied migration 20231128024504_add_service_name_to_active_storage_blobs.active_storage.rb from active_storage
Copied migration 20231128024505_create_active_storage_variant_records.active_storage.rb from active_storage
Copied migration 20231128024506_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb from active_storage
After this, check Rails upgrade guide at https://guides.rubyonrails.org/upgrading_ruby_on_rails.html for more details about upgrading your app.
Amplifyで作成したプロジェクトでamplify pushを使ってデプロイしたLambdaを実行すると[ERROR] Runtime.ImportModuleError: Unable to import module 'index': urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fipsというエラーが発生する。
amplify pushでLambdaをデプロイしたところ、[ERROR] Runtime.ImportModuleError: Unable to import module 'index': urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fipsというエラーが発生
解決策
OpenSSLのバージョンを1.1.1+に変更
次に発生したエラー
[ERROR] Runtime.ImportModuleError: Unable to import module 'index': urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips
→ pip install urllib3で解決
次に発生したエラー
[ERROR] Runtime.ImportModuleError: Unable to import module ‘index’:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check the following:
* The Python version is: Python3.8 from “/var/lang/bin/python3.8”
* The NumPy version is: “1.24.4"
and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.
Original error was: No module named ‘numpy.core._multiarray_umath’
Traceback (most recent call last):
→ 多分NumPyは1.24.4を入れて解決
別に発生したエラー
The following resources failed to deploy:
Resource Name: LambdaFunction (AWS::Lambda::Function)
Event Type: update
Reason: Resource handler returned message: "Unzipped size must be smaller than 135390475 bytes (Service: Lambda, Status Code: 400, Request ID: a3b51e9a-4734-435e-a001-2c7ce1301ee7)" (RequestToken: 92a2a218-8b38-6b12-baff-133e7d710537, HandlerErrorCode: InvalidRequest)
URL: https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/arn%3Aaws%3Acloudformation%3Aap-northeast-1%3A237156174022%3Astack%2Famplify-slackbottesttwo-dev-162215-functionslackLangchainResponder-1PUTGEZ3KV53F%2F6707b020-344c-11ee-a124-0e162f03cf95/events
PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from /usr/local/bundle/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:980:in `new'
meta-tags側のtruncateでは、スペース文字のところで切り詰めが行われます
問題
meta-tagsはtitleやdescriptionをSEOに適切な長さまでに切り詰めますが、titleなどの中にスペース文字が含まれていると、スペース文字のところで切り詰めてしまいます。そのため、文章の先頭付近のみにスペース文字がある文章は大幅に切り詰めが行われてしまいます。
例えば、次の文章にあるスペース文字は10文字目のところのみです。
したがって、80文字に切り詰める設定であっても、この10文字目のところで切り詰められて「Microsoft」となり、80文字に比べ大幅に短い文字数に切り詰められることになってしまいます。
回避策
回避策はいくつかあります。
v2.21.0で追加された'truncate_on_natural_separator'の設定を利用する
設定ファイルである
meta_tags.rb
の中で、以下の記述を行うことで、スペース文字のところで切り詰めなくなります。詳細はmeta-tagsの設定のtruncate_on_natural_separator
の説明をご覧ください。アプリケーション側で切り詰めを行う
meta-tagsに渡す前に、あらかじめアプリケーション側で切り詰めを行うことでも、この問題は回避できます。なお、meta-tagsの設定によっては、meta-tags側での切り詰めをオフにすることも出来ます。設定方法についてはmeta-tagsのREADMEを参照してください。
(参考)内部的な原因
meta-tagsはRuby on Railsのtruncateヘルパーメソッドを最終的に呼び出しますが、このヘルパーメソッドをラップするメソッドを内部に持っています。このラッパーメソッドの引数であるnatural_separatorを省略してのメソッド呼び出しがmeta-tags内に存在し、v2.19.0までは、この省略時のnatural_separatorのデフォルト値がスペース文字であるため、スペース文字のところでの切り詰めが発生しています。
v2.21.0からは、前述の引数natural_separatorが廃止され、ラッパーメソッド内で前述の'truncate_on_natural_separator'の設定値が与えられるようになっています。ですのでこの設定値を変えることで、スペース文字のところで切り詰めなくしたり、任意の文字での切り詰めたりすることが可能になりました。
rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業
Rails 7.1での
action_dispatch.show_exceptions
の変更への対応方法対応の基本的な方向性
config.action_dispatch.show_exceptions
を今後のデフォルトとなる:rescuable
に設定してbin/rails test
でテストを実行します。テストの実行に問題が無く、:rescuable
の仕様で支障が無い場合はこれでOKです。設定で
:rescuable
を選択してテストを実行するとエラーが出るようになってしまった場合は、テストを修正するか、:rescuable
以外の設定値にします。元々true
と設定していた場合には:all
、false
と設定していた場合には:none
へと設定し直せば、以前の挙動と同じになり、エラーは出なくなるはずです。より詳しい情報を紹介している記事
本件の背景やテストの修正方法など、より詳しい情報はこちらの記事をご覧下さい。
rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業
Rails 7.1への移行におけるActive Storageのmigration
bin/rails app:update
コマンドを実行すると以下の3つのファイルがdb/migrate/
に作成されますが、Active Storageをまだ使用したことがないアプリケーションでは、 これら3つのファイルは単純に削除してしまって良いはずです。
より正確に言うと、データベースにactive_storage_blobsテーブルが存在していない場合は、 これら3つのファイルは単純に削除してしまって良いはずです。 その理由として、これら3つのファイルはデータベースのactive_storage_blobsテーブルに対して影響を与えるものであり、
table_exists?(:active_storage_blobs)
がfalseを返すと何もせずにreturnする処理が3つのファイル全てに記述されているからです。ご自身のRailsアプリケーションのデータベースにactive_storage_blobsテーブルが存在するかの確認は
bin/rails console
を実行して、 以下のようにコマンドを実行することで行えます。 結果がfalse
であればactive_storage_blobsテーブルは存在していない、つまり前述の3つのファイルは削除で大丈夫のはずです。ちなみに、データベースにあるテーブルの一覧を見たい場合には
bin/rails console
でActiveRecord::Base.connection.tables
を叩くことでテーブルの一覧を確認できます。rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業
基本的にはRailsガイドの手順に従えば良いと思います。
ガイドの手順にもありますが、ぜひ
bin/rails app:update
コマンドを活用しましょう。bin/rails app:update
コマンドの実行例closure_treeはRailsのfixturesには未対応の模様
closure_treeは、現在のところfixturesと組み合わせて利用されることが想定されていないようです。
と言うのも、closure_tree gemを利用したRails 7のappのtestにおいて、fixturesを用いているのですが、いくつか困った現象に遭遇しているためです。
開発で困っている現象
具体的には、以下のような現象に遭遇しています。
foos(:one).self_and_descendant_ids #=> []
(少なくともselfのIDが含まれるはずなので、空の配列はおかしい)現在の対応策
これらの現象は、test中でcreateメソッド等を使用して作成したオブジェクトでは発生しません。
そこで前述の現象に対応するため、closure_treeを利用しているモデルでは、create等のメソッドでオブジェクトを作成し、testに用いています。
なお、小手先のテクニックとして、fixturesで記述したテスト用初期設定を、createで作ったオブジェクトに移し替える処理を書くという方法があります。こうすることで、テスト用初期設定はfixturesに書きつつも、困った現象は回避することが出来ます。
Stimulusの記事の情報が集まるTopic
Stimulusには、Targetに、Valueに、Action Parameterにと、HTML側からJavaScript側へ何かしらを引き渡す仕組みがいろいろとあります。ですので、これら3つの仕組みについてサンプルコードを交えて説明する記事を書きました。
Stimulusの記事の情報が集まるTopic
公式ドキュメント(英語)
公式情報がしっかりしているので、まず読むならこれら公式情報でしょうが、英語なのが日本人にはちょっと大変。
AWS Amplifyを使ったSlackbotの開発
※書き途中の内容です。
問題
Amplifyで作成したプロジェクトでamplify pushを使ってデプロイしたLambdaを実行すると
[ERROR] Runtime.ImportModuleError: Unable to import module 'index': urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips
というエラーが発生する。そもそも実現したいこと
LambdaでLangChainを使ってPineconeからフロントで入力された質問に対する回答をフロントに返したい。
行った手順
amplify pushでLambdaをデプロイしたところ、
[ERROR] Runtime.ImportModuleError: Unable to import module 'index': urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips
というエラーが発生解決策
OpenSSLのバージョンを1.1.1+に変更
次に発生したエラー
→ pip install urllib3で解決
次に発生したエラー
→ 多分NumPyは1.24.4を入れて解決
別に発生したエラー
→以下の手順で解決
■レイヤーの作り方
rails 7.0.4 で pg 1.5 を使うと警告が出る問題
昨日rails 7.0.5がリリースされました。
早速試したところ、rails 7.0.5とpg 1.5の組み合わせでは、前述の警告が出ないことを確認できました。
そこで、この結果を踏まえて、このTopicの先頭コメントの記述を更新しました。
rails 7.0.4 で pg 1.5 を使うと警告が出る問題
結論
railsのバージョンを7.0.5以上に上げてから、pg 1.5 にバージョンを上げれば、警告の問題は発生しません。
問題が発生したバージョン
問題を引き起こした作業内容
bundle update
でpgのバージョンを1.4系から1.5系に上げた。発生した問題
rails test
で以下のような警告が複数出るようになった。rails 7.0.5のリリース後に行った対処
Gemfile
にて、pgは1.5以降、railsは7.0.5以降を使うように指定してから、bundle update
コマンドを実行した。その後で
rails test
を実行し、前述の警告が出ないことを確認した。rails 7.0.5のリリース前に行った対処
Gemfile
に以下のように記述して、利用するpgを1.4系に留めるように指定した。rails本家の対応状況