かすみん日記

暇なときに何か喋ります

【Heroku with Rails】git push herokuでエラー

Heroku スターターガイド (Rails 6.x)に従ってRailsアプリをHerokuにデプロイしようとしたらエラーが出た。

理解はしていないが解決はできました。

環境

症状

エラーまでの手順再現;

# railsアプリ作成
rails new myapp --database=postgresql
cd myapp

# データベース作成
rails db:create

# gitコミット
git add .
git commit -m "init"

# herokuアプリ作成
heroku create

この後に git push コマンドでherokuにデプロイしようとすると、エラーが出てrejectされた;

% git push heroku main
略
remote:  !
remote:  !     Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
remote:  !     /tmp/build_176a3f7d/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
remote:  !     from /tmp/build_176a3f7d/config/boot.rb:4:in `<top (required)>'
remote:  !     from /tmp/build_176a3f7d/bin/rake:3:in `require_relative'
remote:  !     from /tmp/build_176a3f7d/bin/rake:3:in `<main>'
remote:  !
remote: /tmp/codon/tmp/buildpacks/50d5eddf222a9b7326028041d4e6509f915ccf2c/lib/language_pack/helpers/rake_runner.rb:106:in `load_rake_tasks!': Could not detect rake tasks (LanguagePack::Helpers::RakeRunner::CannotLoadRakefileError)
remote: ensure you can run `$ bundle exec rake -P` against your app
remote: and using the production group of your Gemfile.
remote: /tmp/build_176a3f7d/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
略
remote: Verifying deploy...
remote: 
remote: !       Push rejected to shrouded-shelf-31491.
remote: 
To https://git.heroku.com/shrouded-shelf-31491.git
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/shrouded-shelf-31491.git'

解決

Heroku スターターガイド (Rails 6.x)の日本語記事の内容が古かった。

日本語版にはなかったコマンドが英語版には書いてある。

どうやら以下の手順を踏まないといけないらしい;

rails new myapp --database=postgresql
cd myapp
rails db:create

# 次のコマンドを実行する必要がある;
bundle lock --add-platform x86_64-linux --add-platform ruby

git add .
git commit -m "init"

heroku create
git push heroku main

そうすると、最後の git push でエラーが出ずにデプロイが成功する;

remote: Verifying deploy... done.
To https://git.heroku.com/shrouded-shelf-31491.git
 * [new branch]      main -> main

heroku open コマンドを実行すると、アプリがブラウザで開く。

結論

日本人は情弱

DeepLで翻訳するときに改行を消す

DeepLでは改行は文末だと認識されてしまう。

毎回手で改行を消すのは面倒なので、自動で改行をスペースに置き換えるツールを作った。

znuko.github.io

使い方

入力欄の「Sample」ボタンを押すとサンプルテキストが挿入されます。

「Open DeepL」ボタンを押すと、整形したテキストをDeepL翻訳で開きます。

また、自分で置換規則を設定できるようにしてありますので、正規表現で好きな規則を設定してください。

ソース

ソースです。適宜改造してください。

github.com

代替

どうやらそのようなツールはもう既にあるみたいです。

Shaper とか。

Railsのエラーと解決手順メモ

railsのエラーと解決手順のメモです。

環境

作業ログ

rails new myapp --database=postgresql をして、 rails s をするとエラーが出た;

ActiveRecord::ConnectionNotEstablished (could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
):

略

この記事通り以下のコマンドを実行したら、治ったのかはわからないが、少なくともエラーメッセージは変わった;

brew services start postgresql
brew services stop postgresql
brew services restart postgresql

もう一度 rails s をしたら、別のエラーメッセージが出た;

ActiveRecord::NoDatabaseError (FATAL:  database "deepl_helper_development" does not exist
):

略

この記事通り以下のコマンドを実行したら、エラーはもう出なくなった;

rails db:create

http://127.0.0.1:3000 にアクセスするとちゃんとrailsの初期ページが表示された。

参考

qiita.com

rails-ambassador.herokuapp.com

【LaTeX】句読点を自動置換

目的

句読点は 、。 で入力するけど、出力のPDFでは全角カンマ・ピリオド ,. にしたい。

制約

  • とにかく楽したい
  • OSのシステム設定で句読点をカンマ・ピリオドにするのはヤダ
  • エディタの一括置換は毎回やるのだるい
  • 外部プログラムで自動置換は、latexmk コマンド以外打ちたくない
  • なんならファイル上では 、。 のままでいてほしい

実装

、。 の文字を、,. の文字を返すようなコマンドにする。

例えば、~ 一文字で改行禁止のスペースの意味になるような感じ。

和文文字はそのままではアクティブ(コマンド化)にはできないので、そのカテゴリーコードを変更する。

\kcatcode"3001=15 とすると、(U+3001)が属するUnicodeブロックに含まれる文字のカテゴリーコードが全て15に変更される。

カテゴリーコードが 15 の文字であれば \ から始めなくても文字単体でコマンド名とすることができる。

例えば \def、{,} のような感じでコマンドが定義できる。

すると、文中で単に と書いている読点は、全角のカンマ に置き換わることになる。

問題点

と同じUnicodeブロックに含まれる文字のカテゴリーコードが全て 15 に変更されたが、カテゴリーコード 15 の文字が文書中に現れるとタイプセットエラーになる。

が属するUnicodeブロックには、普段からよく使うカギ括弧 「」 やにょろ なども含まれるが、これらの文字が文書中で使えないことになってしまう。

なので置換する句読点 、。 以外の文字は、元の文字をそのまま返すコマンドとして再定義してやらないといけない。

\def「{「} と書いてしまうと無限ループになってしまうので、Unicodeの番号で \def「{\char"300C} のようにして再定義する。

まだ他にも副作用があるのかもしれないが、一応はこれで大丈夫なはず。

あとは一応、和文の句読点 、。 が使いたいときには使えるように適当にコマンドを用意しておいてやればいいかなと。

\newcommand\読点{\char"3001}
\newcommand\句点{\char"3002}

サンプルコード

uplatex 用のサンプルコードを置いておきます。

%% Typeset: uplatex
\documentclass[uplatex,a6paper,papersize]{jsarticle}

%% 句読点(、。)を含むUnicode Blockのカテゴリーコードを15に変更
\kcatcode"3000=15

%% Unicode文字を再定義
\usepackage{newunicodechar}
%% CJK Symbols and Punctuation
%% Range: 3000—303F
%% Quantity of characters: 64
\newunicodechar{ }{\char"3000}
\newunicodechar{}{\char"FF0C}% <- 3001
\newunicodechar{}{\char"FF0E}% <- 3002
\newunicodechar{}{\char"3003}
\newunicodechar{}{\char"3004}
\newunicodechar{}{\char"3005}
\newunicodechar{}{\char"3006}
\newunicodechar{}{\char"3007}
\newunicodechar{}{\char"3008}
\newunicodechar{}{\char"3009}
\newunicodechar{}{\char"300A}
\newunicodechar{}{\char"300B}
\newunicodechar{}{\char"300C}
\newunicodechar{}{\char"300D}
\newunicodechar{}{\char"300E}
\newunicodechar{}{\char"300F}
\newunicodechar{}{\char"3010}
\newunicodechar{}{\char"3011}
\newunicodechar{}{\char"3012}
\newunicodechar{}{\char"3013}
\newunicodechar{}{\char"3014}
\newunicodechar{}{\char"3015}
\newunicodechar{}{\char"3016}
\newunicodechar{}{\char"3017}
\newunicodechar{}{\char"3018}
\newunicodechar{}{\char"3019}
\newunicodechar{}{\char"301A}
\newunicodechar{}{\char"301B}
\newunicodechar{}{\char"301C}
\newunicodechar{}{\char"301D}
\newunicodechar{}{\char"301E}
\newunicodechar{}{\char"301F}
\newunicodechar{}{\char"3020}
\newunicodechar{}{\char"3021}
\newunicodechar{}{\char"3022}
\newunicodechar{}{\char"3023}
\newunicodechar{}{\char"3024}
\newunicodechar{}{\char"3025}
\newunicodechar{}{\char"3026}
\newunicodechar{}{\char"3027}
\newunicodechar{}{\char"3028}
\newunicodechar{}{\char"3029}
\newunicodechar{〪}{\char"302A}
\newunicodechar{〫}{\char"302B}
\newunicodechar{〬}{\char"302C}
\newunicodechar{〭}{\char"302D}
\newunicodechar{〮}{\char"302E}
\newunicodechar{〯}{\char"302F}
\newunicodechar{}{\char"3030}
\newunicodechar{}{\char"3031}
\newunicodechar{}{\char"3032}
\newunicodechar{}{\char"3033}
\newunicodechar{}{\char"3034}
\newunicodechar{}{\char"3035}
\newunicodechar{}{\char"3046}
\newunicodechar{}{\char"3047}
\newunicodechar{}{\char"3038}
\newunicodechar{}{\char"3039}
\newunicodechar{}{\char"303A}
\newunicodechar{}{\char"303B}
\newunicodechar{}{\char"303C}
\newunicodechar{}{\char"303D}
\newunicodechar{}{\char"303E}
\newunicodechar{}{\char"303F}

%% 元の句読点を退避
\newcommand\読点{\char"3001}
\newcommand\句点{\char"3002}

\begin{document}\huge

やあ,こんにちは.

やあ、こんにちは。

やあ\読点 こんにちわ\句点

\end{document}

github にも置いておきます。

参考

zrbabbler.hatenablog.com

en.wikipedia.org

unicode-table.com

HerokuにRailsアプリをデプロイできたよ

とりあえずrails newしたやつをherokuにデプロイできたので記録。

環境

前提

rails

一応、rails のバージョンは6系とする。

初めからアプリを作る場合は、sqlをデフォルトの sqlite3 ではなく postgresql を使うようにオプションをつける;

rails new myapp --database=postgresql

herokuでは sqlite3 が使えないらしい。

オプションなしで rails new しちゃった人は以下の作業を行う。

GemFile を編集;

# gem 'sqlite3', '~> 1.4' # こっちは消す
gem 'pg'                          # こっちを書く

ここで、bundle install を実行すると pg が無いと言われたので gem install pg をしたけどまた怒られた。

postgresqlbrewでインストールすればいいらしい;

brew install postgresql

その後、bundle install を実行すればオーケー。

github

今回はgithubとherokuを連携させてデプロイする。

さっき作ったアプリをgitコミットして、githubにプッシュする。

github desktopアプリがあるので簡単ですね。

heroku

herokuのダッシュボードで、右上にある「New」から「Create new app」をクリック。

適当に名前をつけて「Create app」をクリック。

「Deploy」タブの「Deployment method」にあるgithubのアイコンをクリックして、アカウントを連携させる。

f:id:geniusium:20210212084423p:plain

さっき作ってプッシュしたアプリのリポジトリを検索して「Connect」。

それができたら、あとは「Manual deploy」にある「Deploy Branch」ボタンを押してしばし待つ。

f:id:geniusium:20210212084808p:plain

エラーが出なかったらクリア。 ついでに「Enable Automatic Deploys」ボタンも押しておくといい。

最後に、右上にある「Open app」ボタンをクリックすれば、railsで作ったアプリがブラウザに表示されるはず。

以上、GUIに頼った情弱のやり方でした。

あとは公式のスターターガイドを見てください。

参考

qiita.com

devcenter.heroku.com

【Rails 6】rails serverでエラーが出る(webpacker)

rails 5系ではふつうに rails server でサーバーが起動していたが、6系にアプデしてからサーバーを起動しようとしたらエラーが出た。

一応解決したのでその作業ログ。

環境

作業ログ

rails s でエラーが出る;

% rails s
=> Booting Puma
=> Rails 6.1.2.1 application starting in development 
=> Run `bin/rails server --help` for more startup options
略
/Users/あ/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:99:in `rescue in load': Webpacker configuration file not found /あぷりへのぱす/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /Users/あぷりへのぱす/config/webpacker.yml (RuntimeError)

webpacker が無いらしいのでインストールする。またエラーが出る;

% rails webpacker:install
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
Exiting!

yarn が必要らしいのでbrewでインストールする;

更新:brewより npm でインストールした方が良いです;

npm install --global yarn

インストールの確認;

% yarn -v
1.22.10

おけ。 もう一度 webpacker のインストールに挑戦する;

rails webpacker:install

多分オーケー。 これで無事railsのサーバーが起動するようになった;

% rails s
=> Booting Puma
=> Rails 6.1.2.1 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.2.1 (ruby 2.6.6-p146) ("Fettisdagsbulle")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 7966
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop

以上!

参考

qiita.com

classic.yarnpkg.com

【Mac】Railsのインストール

Progateの記事に従ってMacRailsをインストールしたときの作業ログです。

記事通りスムーズにいかなかったのでメモを残しておきます。

環境

rbenvのインストール

rubyのバージョン管理ツールの rbenvbrewでインストールする;

brew install rbenv ruby-build

rbenv -v コマンドを実行して、バージョンが表示されればインストールが完了している;

rbenv 1.1.2

次に、rbenv の初期設定(パスの設定などをするためのコマンド)を、使っているシェルのrcファイルに書く。

例えば、zshを使っている人は、次の2つのコマンドを実行する;

echo 'eval "$(rbenv init -)"' >>  ~/.zshrc
source ~/.zshrc

Rubyのインストール

rbenv install --list コマンドで、インストール可能な ruby のバージョンを教えてくれる。

Macであれば標準で ruby がインストールされているが、今回は v2.6.6ruby をインストールしてみる。 次のコマンドを実行;

rbenv install 2.6.6

インストールが終わったら rbenv global 2.6.5 を実行して、ruby のバージョンを切り替える。

ruby -v で確認すると、、、なぜか切り替わっていなかった。 rbenv versions で確認すると一応そっちでは切り替わっていたのだが。

もう一度 source ~/.zshrc を実行してから ruby -v を実行すると、ちゃんとバージョンが切り替わった;

ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin20]

Ruby on Railsのインストール

バージョンを指定してrailsをインストールしてみる。

次のコマンドを実行;

gem install rails -v "5.2.4.1"

インストールが完了して、rails -v でバージョンを確認しようとすると、なぜか怒られる;

Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.

rbenv rehash コマンドを実行してから、再び rails -v を実行すると、バージョンは確認できたが、上になんかいろいろ書かれている;

Ignoring eventmachine-1.2.7 because its extensions are not built. Try: gem pristine eventmachine --version 1.2.7
Ignoring ffi-1.11.1 because its extensions are not built. Try: gem pristine ffi --version 1.11.1
Ignoring http_parser.rb-0.6.0 because its extensions are not built. Try: gem pristine http_parser.rb --version 0.6.0
Ignoring sassc-2.2.1 because its extensions are not built. Try: gem pristine sassc --version 2.2.1
Rails 5.2.4.1

Tryなんたらと書いてあるところを全部、順にTryしてみる;

gem pristine eventmachine --version 1.2.7
gem pristine ffi --version 1.11.1
gem pristine http_parser.rb --version 0.6.0
gem pristine sassc --version 2.2.1

すると、バージョンだけが表示されるようになった;

% rails -v
Rails 5.2.4.1

以上!!!

参考

prog-8.com

prog-8.com

qiita.com