- 1. LINE連携でngrockが使えへんやないかーい!!
- 2. Railsのjsファイルで画像パスを指定するとき
- 3. 【Rails】cloneしてきたアプリケーションを動かす手順【GitHub】
- 4. 【Git】【GitHub】コミット履歴を引き継がずgit cloneする方法 後半無駄に丁寧に解説しています
- 5. Rails + React + docker-compose をcapybaraで操作するのにハマった記録
- 6. DockerでRails(web)が立ち上がらずにExit 127と出る場合の対処法
- 7. 【Rails】loggerの出力をminitestでテストする方法
- 8. 【?エラー対応】Herokuデプロイ時に「Webpaker::Manifest::MissingEntryError」【javascript_pack_tag】
- 9. 【備忘録】Railsリレーション検索・作成総集
- 10. Railsでxml, html などMIMEタイプごとに返すViewを指定する
- 11. M1MacでGemのmysql2でエラー
- 12. 「Rails」+「Heroku」+「Docker」+「CircleCI」を学ぶためのおすすめの教材
- 13. 【?エラー対応】CircleCiでの自動テスト時に、「Rails」+「Docker」環境でエラーになる【自動デプロイ】
- 14. RailsアプリケーションでN+1問題を解決する
- 15. 【備忘録】axiosでpostリクエストをしたときparamsがうまく取り出せない
- 16. Railsのバージョンアップ時にCSRFトークンに悩まされた話
- 17. 【RSpec】基本的なRSpec導入手順
- 18. graphql-rubyで入力値バリデーションをカスタマイズする
- 19. rails cでの記述map,ppについて
- 20. 新規投稿時にundefined method `upload’ for nil:NilClassエラーについて
LINE連携でngrockが使えへんやないかーい!!
# この記事について
LINE連携でローカルのサーバーを外部公開するためにngrockを使おうとしたけど使えかったので、現在代わり使っているサービスを紹介する記事。(railsでの連携)
「ngrockの使い方をメモ代わりにQiitaに掲載してよかったー」と思っていた矢先、使えなくてガッカリ。。。
https://qiita.com/ashketcham/items/c743e31f818534b828be
## ngrock
LINE公式に問い合わせている方がいっらしゃいました。https://www.line-community.me/ja/question/5f07c0fb851f74ab9c18e8dc/ngrok%E3%81%A7%E5%A4%96%E9%83%A8%E5%85%AC%E9%96%8B%E3%81%97%E3%81%9Furl%E3%81%A7webhook%E6%A4%9C%E8%A8%BC%E3%82%92%E6%88%90%E5%8A%9F%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84
# 代わりのサービス –
Railsのjsファイルで画像パスを指定するとき
## はじめに
Railsではassetsがコンパイルされるため、パスが開発環境と本番環境で異なる。Railsの場合は`asset_path`をつければよく、sassの場合も`image-url`をつければよい。
“`rb
# asset_pathをつければコンパイルされていても問題ない。
asset_path(‘assets/hoge/fuga.png’)
“`ただ、JSで画像パスを指定する場合は`asset_path`や`image-url`のように指定できない。そのため画像パスの指定の仕方で少しハマった。
## 解決
画像ファイルのパスを`import`すれば良い。すると`fugaIcon`のパスが`pack/~~~/`とpackから始まるパスが生成される。
“`js
import fugaIcon from ‘../../../assets/images/hoge/fuga.png’;
“`
【Rails】cloneしてきたアプリケーションを動かす手順【GitHub】
## はじめに
学習を始めて間もないです。
間違っていること等ございましたらお知らせください!
気をつけていますが特に用語の使い方が正しくない可能性があります。一つ前の記事でcloneしてきたアプリ(jQuery導入済み)を、
自分の環境ではきちんと動作するまでこんな手順をふんでいますという紹介です。
(出てきたエラー内容やターミナルの指示に従っているだけなので大したことはしてません)## 対象の方
cloneしてrails sしたらエラーが出てわからない!って方jQueryが正常に動いてたアプリをcloneしたけど新しくcloneした方はなんだかちゃんと動かないって方向け
これはかなり限定的かと思われます!
(途中まではjQuery関係ないはず…)## 環境
Rails: 6.1.5
Ruby: 2.6.3
Git: 2.32.0
ローカル環境: cloud9## 簡単に手順
1. rails db:migrate
2. webpacker:install
3. webpacker:compile
4. jQuery使えるように文言足す
4. rails s
4
【Git】【GitHub】コミット履歴を引き継がずgit cloneする方法 後半無駄に丁寧に解説しています
## はじめに
学習を始めたばかりです。
気をつけていますが用語などもちょこちょこ間違っているかもしれません。
色々間違ったこと等ございましたらぜひ教えて下さい!あと、もしかしたらもっとシンプルな方法があるのでは?と思っています。
今回のやり方はものすごく遠回りをしているかもしれません。ただ、たくさんコミット履歴を持ってるリポジトリのcloneに時間がかからない方法だそうです!◆理由は後述します。
(今の所私にそんな機会は全くありませんが笑)### こちらのサイトをとても参考にさせいただきました!!!
[Gitで別のRepositoryにpushするときに今までのcommit履歴を残さない方法
](https://www.greptips.com/posts/1270/)
後日、自分がこの手順でRailsアプリをcloneした後に行っている手順もせっかくなので書きます。
(cloneしたアプリによって手順は変わると思いますし、そもそも大したことはしてません!webpacker:installとか基本的なやつです)
追記:[書きました!](https://qiita
Rails + React + docker-compose をcapybaraで操作するのにハマった記録
初投稿です。
理解してしまえば簡単なのですが…
結構な時間ハマったので記事に残しておきます。参考にさせていただいた記事↓ありがとうございます
https://qiita.com/ijufumi/items/badde64d530e6bade382
# 今回の目的
現在、React+Railsのアプリケーションをdocker-composeの環境で制作していまして、
E2Eテストを行うにあたって、Rails側からcapybaraとseleniumを使って操作が必要でした。# ハマった箇所
dockerコンテナ内からホストOSのlocalhostに接続するという概念。
そもそもdockerの仕組みをよく理解して使っていなかったのが問題でした。“`:docker-compose.yml
chrome:
image: selenium/standalone-chrome-debug:latest
ports:
– 4444:4444
– 5900:5900
“`
docker-compose.ymlに上記を追加
テスト中の様子
DockerでRails(web)が立ち上がらずにExit 127と出る場合の対処法
# 経緯
`docker-compose run up`などでコンテナを起動させると、dbは立ち上がるが、Rails(web)のほうが立ち上がらず、`docker-compose ps`で起動状態を確かめると `Exit 127`と表示されました。# 結論
`docker-compose.yml`ファイル内の文法ミス# 原因
まず、なぜ`Exit 127`という状態になるのか考えました。
最初に、dockerで終了したコンテナのログを見てみます。
“`
xxx_db_1 docker-entrypoint.sh postgres Up 5432/tcp
xxx_web_1 entrypoint.sh bash -c rm – … Exit 127
“`
つぎに、`xxx_web_1`のログを見てみます。
“`
% docker logs xxx_web_1
bash: line 1: bin/rails: No such file or directory
“`
`bin/rails` というファイルやディレクトリがありません
【Rails】loggerの出力をminitestでテストする方法
コントローラのテストをする際に、logger出力のテスト方法につまったので、備忘録として残します。他にいい方法があれば教えていただけると幸いです。
## バージョン
Rails 6.1.5
## 実装方法
適当なアクションに遷移した時にlogを吐く場面を想定します。
“`ruby
class XXXController < ApplicationController def index logger.info "通ったで" #ここを検出したい end end ``` ログの内容をテストします。 ```ruby # stubを使用するために必要 require 'minitest/mock' # 略 test 'logger.info を出力' do http_method = lambda { get staffs_path } logs = get_logs(http_method) expected_message = "通ったで" assert_log(logs,expected_message) end # 略 #
【?エラー対応】Herokuデプロイ時に「Webpaker::Manifest::MissingEntryError」【javascript_pack_tag】
# ✅当方の環境
– 開発環境 : Docker
– 本番環境 : heroku
– Gemfileの内容
– ruby 2.7.5
– rails 6.1.5
– webpacker 5.0# ✅関連キーワード
– %= javascript_pack_tag ‘application’, ‘data-turbolinks-track’: ‘reload’ %>
– Bootstrap導入したらエラーが発生
– Webpaker::Manifest::MissingEntryError
– status=500
– 「application.html.erb」でエラーが発生
– Herokuデプロイ時のエラー# ✅エラー内容
– Herokuのログの内容(heroku logs -t -a アプリ名)※一部抜粋
“`
Started GET “/” for at 2022-04-12 07:59:45 +0000
Processing by TopController#index as HTML
Rendered top/index.html.erb wit
【備忘録】Railsリレーション検索・作成総集
– ユーザー VS 性別(1:多)
– ユーザー VS スキル (多:多)## 1:多(検索)
“`
User.find_by(sex_id: 1)
“`## 多:多(検索)
“`
User.includes(:skills).where(user_skills: { skill_id: 1 })
“`
※user_skillsは中間テーブル## 多:多(作成)
“`
User.new(skills: [Skill.find(1)])
“`
Railsでxml, html などMIMEタイプごとに返すViewを指定する
mime typeによって返すviewを変更する方法です。
例えばxml, htmlへのレスポンスを別々に作成する場合
“`ruby:UsersController.rb
class UsersController < ApplicationController def show @user = users.find(params[:id]) respond_to do |format| # HTMLのレスポンス format.html # XMLを使う場合のレスポンス format.xml # 指定がない場合のレスポンス format.any end ``` html, xml それぞれに対応したテンプレートは以下のパスに作成します。 `app/views/users/show.html.erb` `app/views/users/show.xml.erb` ### MIME TYPE種類 https://developer.mozilla.org/ja/docs/Web/HTTP
M1MacでGemのmysql2でエラー
# 環境
ホストOS:MacOS12.3
CPU:M1
仮想環境:docker compose
ruby: 2.7.5p203
rails: 6.1
MySQL: 8.0# エラーメッセージ
以下は主なエラーを抜粋したものです。“`
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
“`“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
“`“`
ld: warning: directory not found for option ‘-L/usr/local/opt/openssl/lib’
“`“`
ld: library not found for -lzstd
“`エラーメッセージはerror,failed,not foundあたりが原因のことが多いですね。
# 解消するためにやったこと
### MySQLインストール
新しいPCでMySQ
「Rails」+「Heroku」+「Docker」+「CircleCI」を学ぶためのおすすめの教材
# ✅こんな人におすすめ
– ローカルで「Rails」を開発したことがあり、Dockerを用いて開発してみたい方
– 「Rails」で開発したアプリを「Heroku」にデプロイしたことがあり、「CircleCI」について興味がある方
– 「Docker」も「CircleCI」も聞いたことがあり、少し勉強してみたが、いまいち理解できなかった
– あまりお金をかけず、入りだけでも理解したい方# ✅「Docker」で「Rails」アプリを開発
# ✅「Docker」の「Rails」で開発したアプリをHerokuにデプロイ
# ✅「CircleCI」を使用して、「Docker」の「Rails」で開発したアプリを「Heroku」に自動デプロイ / 自動テスト
【?エラー対応】CircleCiでの自動テスト時に、「Rails」+「Docker」環境でエラーになる【自動デプロイ】
# ✅当方の環境
– 開発環境 : Docker
– 本番環境 : heroku
– Gemfileの内容
– ruby 2.7.5
– rails 6.1.5
– webpacker 5.0# ✅関連キーワード
– 「Docker」+「Rails」+「CircleCi」の環境
– CircleCiにおける自動テスト時にエラー(ビルド時はエラーが出ていない)
– 「bundle exec rails db:migrate」でエラーが発生している模様
– Run `bundle install` to install missing gems.
– bundle installされない# ✅エラー内容
– CircleCiのログの内容※一部抜粋
“`
#!/bin/bash -eo pipefail
bundle exec rails db:migrate
Could not find rake-13.0.6 in any of the sources
Run `bundle install` to install missing gems.Exited wit
RailsアプリケーションでN+1問題を解決する
# N+1問題とは
N+1問題とは、1つのテーブルへのSQL発行+複数(N回)の関連テーブルへのSQL発行が発生している現象のことを示している。
つまり、データ量が増えるだけパフォーマンスが低下してしまう。また、大量のSQL発行でDBに高負荷をかけてしまう副次的な問題も発生してしまう。
###### 例えば、console上でSkillCategoryモデルから5つSkillの名前を取得してみると
“`ruby:ruby
Skill.limit(5).each do |skill|
p skill.skill_category.name
end
“`
###### 下のようにconsole上でSQL発行ログが出力される
“`sql:sql
Skill Load (0.4ms) SELECT “skills”.* FROM “skills” LIMIT ? [[“LIMIT”, 5]]
SkillCategory Load (0.2ms) SELECT “skill_categories”.* FROM “skill_categories” WHERE “skill_
【備忘録】axiosでpostリクエストをしたときparamsがうまく取り出せない
小1時間ハマったのでメモ。
“`react:React
const createUser = async () => {
await axios
.post(`${process.env.NEXT_PUBLIC_ENDPOINT}/admin/create_user`, {
params: {
nameSei: nameSei,
},
})
.then((response) => {
// 処理
}
})
.catch(() => {
//処理
});
};“`
このとき、ユーザー作成するため、Railsでストロングパラメーターを使おうと思い
`params.permit(:nameSei)`すると何故かストロングパラメーターが通らない。色々な書き方を試しまくって、最終的に`params[:params].permit(:nameSei)`でいけることがわかった。
Railsのバージョンアップ時にCSRFトークンに悩まされた話
Railsを使用していると、普段何気なく運用しているCSRFという仕組み。
このCSRFについて、Railsのバージョンアップ時に苦戦した経緯がありましたのでシェアしたいと思います。
そもそもCSRFとは?という方については、下記に分かりやすく解説してくれている記事がありますのでそちらを参考にして頂ければと思います。
[RailsのCSRF対策について](https://qiita.com/eshow/items/915f8e8ad317aa8e49a6)### Railsのバージョンによって生成されるCSRFトークンが異なる
今回のバージョンアップではRailsを6.1→7.0に上げたのですが、この旧バージョンと新バージョンで生成されるCSRFトークンが異なります。どのような違いかというと、旧バージョンでは通常のBase64でトークンがエンコードされるのに対し、新バージョンではURLセーフなBase64でエンコードするようになりました。
そしてこのトークンが異なる状態で、ページ遷移するとArgumentErrorを引き起こします。(この時は旧バージョンから新バージョン、新バージョ
【RSpec】基本的なRSpec導入手順
## はじめに
超初歩的なRSpec導入部分のみです
実践はしてませんのでご注意ください## 環境
Rails: 6.1.4
Ruby: 2.6.3
RSpec: 3.10
rspec-rails: 5.0.1## 手順
1.Gemfileに記述“`ruby:Gemfile.rb
:
:
group :test do
gem ‘capybara’
gem ‘rspec-rails’
gem “factory_bot_rails”
gem ‘faker’
end
:
end
“`
“`terminal:terminal
bundle install
“`
2.↓必要なファイルをインストールする“`terminal:terminal
rails g rspec:install
“`
3.specフォルダにfactoriesフォルダを作成
↓
factoriesフォルダの中にモデル名.rbを作成
例)book.rbやarticle.rbなど4.テストデータを定義する
“`ruby:spec/fact
graphql-rubyで入力値バリデーションをカスタマイズする
# 背景とやりたいこと
graphql-rubyにはargumentに対して[バリデーション](https://graphql-ruby.org/fields/validation.html)をかけることができるのですが、
愚直にやると以下のようなpathとlocations付きの形式でエラーが返ってきます。
参考: [https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array](https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array)
“`json
{
“errors”: [
{
“message”: “Can’t continue with this query”,
“locations”: [
{
“line”: 2,
“column”: 10,
}
],
rails cでの記述map,ppについて
## 残しておきたい内容
メンターの方に質問した際にrails cをしている際に気になる記述をしていたので調べて自分の記録用として残しておこうと思います。## map
each文のようにモデルの内容を順番に表示できる
配列変数.map {|変数名| 具体的な処理 }
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
“`
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
Dish Load (0.2ms) SELECT “dishes”.* FROM “dishes”
=> [#
新規投稿時にundefined method `upload’ for nil:NilClassエラーについて
## 解決したいこと
料理投稿サイトで新規投稿画面にてタイトル、紹介文、画像の情報を入力し新規投稿したところundefined method `upload’ for nil:NilClassエラーが出て解決をしたい。
前提・・・Active Strage導入済## 試して見たこと
データの流れを確認するためにテーブル、モデル、コントローラの記述を一通り確認。
=>これといった間違いはないような感じが。モデルにも has_one_attachedの記述があり問題はなさそう。
コントローラもストロングパラメータは大丈夫。*/CookOP/app/models/dish.rb
“`ruby
class Dish < ApplicationRecord has_one_attached :dish_image belongs_to :user#, optional: true has_many :comments, dependent: :destroy has_many :favorits, dependent: :destroy end ``` */Cook