何かメモリたいブログ

何かメモリたい

久しぶりにDokku (0.29.0)でruby-getting-startedやったら色々ハマったのでメモ

久しぶりにDokku触りたくなったのでDigitalOceanruby-getting-startedやってたら2日位ハマったのでメモ。

$ dokku -v
dokku version 0.29.0

とりあえず動くまでにやったこと

  • DropletBasic ($6/mo)のMemory 1GBだとビルド中エラーが起こるので Basic ($12/mo) のMemory 2GBにする。

  • Rails 5系なのでRubyは2.5.xを使う。(Ruby 3.xは使わない。)(使えない?)

  • bundle lock --add-platform x86_64-linuxでプラットフォームを追加する。

  • app/assets/config/manifest.jsを設置する

app/assets/config/manifest.js

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
  • gem 'psych', '~> 3.1' を追加する。

  • その他良く分からないエラーが起きたらホストでdokku repo:purge-cache ruby-getting-started

そんなにハマらなかったエラー

とりあえずプラットフォーム追加、manifest.jsはログが出てたので、それで対処しただけ。

メモリ不足はググったらStackoverflowの記事が出てきて(URL無くした)、そういうものかと思ってDropletをResizeしたらビルドが動くようになった。

Rails5のに関しては結構ハマってしまい、最初とりあえず Ruby 3.1.3でやるか!って思ってGemfile

ruby '3.1.3'

とか書いてデプロイしたらwrong number of arguments (given x, expected x) (ArgumentError)みたいなエラーが出てわけ分からなくなってしまいちょっと詰まった。

(wrong number of arguments (given x, expected x) (ArgumentError)みたいなエラーはアホみたいに遭遇した)

Rails5.2はRuby2.5.xが推奨とのことなので、指定を2.5.9に変更した。

結構ハマったエラー

wrong number of arguments (given x, expected x) (ArgumentError)系のエラーはめちゃくちゃ出て、ググるたびに解決方法が違って混乱したけど、とりあえず Gemfile

- gem 'psych', '~> 3.1' 

を追加するという解決方法が出てきて追記したらそのエラーは直った。

が今度はRuby 2.5.9psych ~>3.1を使ってるにも関わらず、dokkuのエラーログにruby 2.5.0の文字列とpsych-5.0.1の文字列が...

--- ERROR REPORT TEMPLATE -------------------------------------------------------

       ```
       ArgumentError: wrong number of arguments (given 4, expected 1)
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/psych-5.0.1/lib/psych.rb:322:in `safe_load'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/safe_yaml.rb:31:in `safe_load'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:496:in `block (2 levels) in read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:495:in `wrap'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:495:in `block in read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/tar_reader.rb:116:in `seek'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:494:in `read_checksums'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:547:in `block (2 levels) in verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/tar_reader.rb:29:in `new'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:546:in `block in verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/file_source.rb:30:in `open'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package/file_source.rb:30:in `with_read_io'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:545:in `verify'
       /tmp/build/vendor/ruby-2.5.9/lib/ruby/2.5.0/rubygems/package.rb:526:in `spec'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/rubygems_integration.rb:209:in `spec_from_gem'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/source/rubygems.rb:167:in `install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/gem_installer.rb:54:in `install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:62:in `apply_func'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:57:in `block in process_queue'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:54:in `loop'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:54:in `process_queue'
       /tmp/build/vendor/bundle/ruby/2.5.0/gems/bundler-2.3.10/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'
       ```

Rails + DokkuでHello Worldしたいだけなのに、なぜここまで時間かかるのか...と思ったけど最初の方にデプロイしたコードのキャッシュとかがDokkuに残ってるのかと思い、キャッシュクリア系のコマンドが無いか探したら見つけた。

Repository Management

repo:purge-cache <app>                   # Deletes the contents of the build cache stored in the repository

なのでdokkuをホストしてるサーバーで下記のコマンドを実行...

$ dokku repo:purge-cache ruby-getting-started

そして改めてpush....

git push dokku master

........

..........

....................................................................

Getting Started with Ruby on Heroku (Doku)

やったぜ。

その他

Dokku Proというのが出てますね。

Dokkuの高機能版+WebUIみたいな感じなのかな。

今回久しぶりにDokku試すついでにLedokkuというDokkuにWebUIを提供してくれるOSS試したけど、まだ発展途上という感じで結局ホストでコマンド打ってチュートリアルを進める事になりました。

Laradockでphp-fpmのビルドが失敗する(ERROR: Service 'php-fpm' failed to build:)

Laravelでプロジェクト作るぞー。

laradock.io

$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
$ cp env-example .env
$ docker-compose up -d --build workspace nginx postgres php-fpm
Creating network "laradock_frontend" with driver "bridge"
Creating network "laradock_backend" with driver "bridge"
Creating network "laradock_default" with the default driver
Building postgres
Step 1/4 : FROM postgres:alpine
 ---> 5df4f9af771f
Step 2/4 : LABEL maintainer="Ben M <git@bmagg.com>"
 ---> Using cache
 ---> cbd40267a5dc
Step 3/4 : CMD ["postgres"]
 ---> Using cache
 ---> fce54f198ca3
Step 4/4 : EXPOSE 5432
 ---> Using cache
 ---> 9e99ef40b306

ヨシ…。

E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/imagemagick-6-common_6.9.7.4+dfsg-11+deb9u5_all.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickcore-6-arch-config_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickcore-6-headers_6.9.7.4+dfsg-11+deb9u5_all.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickcore-6.q16-3_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickwand-6-headers_6.9.7.4+dfsg-11+deb9u5_all.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickwand-6.q16-3_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickcore-6.q16-3-extra_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://cdn-fastly.deb.debian.org/debian/pool/main/p/python3.5/libpython3.5-minimal_3.5.3-1_amd64.deb  404  Not Found
E: Failed to fetch http://cdn-fastly.deb.debian.org/debian/pool/main/p/python3.5/python3.5-minimal_3.5.3-1_amd64.deb  404  Not Found
E: Failed to fetch http://cdn-fastly.deb.debian.org/debian/pool/main/p/python3.5/python3.5_3.5.3-1_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickcore-6.q16-dev_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickwand-6.q16-dev_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not FoundFetched 70.6 MB in 7s (9688 kB/s)

E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/libmagickwand-dev_6.9.7.4+dfsg-11+deb9u5_all.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/g/ghostscript/libgs9-common_9.20~dfsg-3.2+deb9u4_all.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/g/ghostscript/libgs9_9.20~dfsg-3.2+deb9u4_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/g/ghostscript/ghostscript_9.20~dfsg-3.2+deb9u4_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/imagemagick-6.q16_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Failed to fetch http://security-cdn.debian.org/pool/updates/main/i/imagemagick/imagemagick_6.9.7.4+dfsg-11+deb9u5_amd64.deb  404  Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c if [ ${INSTALL_IMAGEMAGICK} = true ]; then     apt-get install -y libmagickwand-dev imagemagick &&     pecl install imagick &&     docker-php-ext-enable imagick ;fi' returned a non-zero code: 100

ヨシ…。

前使った時は出てなかったんだけどな…。

github.com

さすが GitHub …解決済みやで。

./laradock/php-fpm/Dockerfile485行目 に下記のような記述がある。

###########################################################################
# ImageMagick:
###########################################################################

USER root

ARG INSTALL_IMAGEMAGICK=false

RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi

これを下記のように変更する。

###########################################################################
# ImageMagick:
###########################################################################

USER root

ARG INSTALL_IMAGEMAGICK=false

RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    apt-get update && \
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi

apt-get update && \ が追加されている。

頼む…!

$ docker-compose up -d --build workspace nginx postgres php-fpm

...
...
...

Successfully built ee1a7d326193
Successfully tagged laradock_nginx:latest
Creating laradock_docker-in-docker_1 ... done
Creating laradock_postgres_1         ... done
Creating laradock_workspace_1        ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_nginx_1            ... done
$

ヨシ!

さらに続けて Laravel プロジェクトをついでに作成する…。

laradock/.env8行目 辺りの APP_CODE_PATH_HOST=../APP_CODE_PATH_HOST=../app などに変更して、、、

$ docker-compose exec workspace composer create-project "laravel/laravel=5.7.*" app
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Installing laravel/laravel (v5.7.19)
  - Installing laravel/laravel (v5.7.19): Downloading (100%)         
Created project in app
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 86 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.10.0): Downloading (100%)         
  - Installing vlucas/phpdotenv (v2.6.1): Downloading (100%)         
  - Installing symfony/css-selector (v4.2.2): Downloading (100%)         
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%)  

...
...
...


Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.
$

そして localhost にアクセス…!

f:id:domwp:20190130151120p:plain
404 not found

…。

ビルドした後 .env 変更してもだめってことですね。

再度 docker-compose up -d --build workspace nginx postgres php-fpm を実行して…。

f:id:domwp:20190130150456p:plain
Laravel5.7

ヨシ!

Laravel5.5 + PHP7.0 でEC2上のアプリからS3に画像をアップロードしようとしてえらいハマった

解決策

/etc/php.ini内のupload_max_filesizeを変更する。

変更前

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

変更後

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M

問題点

Laradockでの開発環境を整えて、ローカルだとS3への画像アップロード成功するのに、EC2上だと何故かアップロードできずかなりハマった。

if ($request->hasFile('image-file')) {
// ローカルだとこっちへ来る
$path = Storage::putFile('images', $request->file('image-file'), 'public');
// $url =Storage::url($path);
} else {
// EC2上だとこちらへ来る
Log::info("no images");
}

Log::info($request->all())でログを見ると下記のような感じ。 なぜかmimeTypeapplication/octet-streamになってしまっている…。

Laradock

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'image/jpeg',
     'size' => 2577303,
     'error' => 0,
     'hashName' => NULL,
  )),

EC2

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'application/octet-stream',
     'size' => 0,
     'error' => 1,
     'hashName' => NULL,
  )),

EC2上でパーミッション変更したり、Form::file'accept'=>'image/*'を追加したり、JPGという拡張子がおかしいのかと思い/etc/mime.typesを確認してみたりしたけど、結局/etc/php.iniupload_max_filesize = 2Mが原因だったみたい…。 なんでローカルだと成功してたかは{laradock}/php-fpm/laravel.ini内のupload_max_filesize = 20Mが適用されてたからっぽい。

/etc/php.ini変更後はmimeTypeも正しいものになった。

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'image/jpeg',
     'size' => 2105078,
     'error' => 0,
     'hashName' => NULL,
  )),

mimeTypeapplication/octet-streamになってたのは、多分ファイルサイズ上限の2Mに引っかかりファイルがアップロードできてなくて、存在しないファイルからmimeTypeを推測しようとしてapplication/octet-streamとかになってたんだきっと(未調査)…



laravel upload image file mime type octet とかで検索してもバシッとくる結果が出てこなかったのは、きっとこんな初歩的なミスをする人はあんまいないということだろう…。






(´・ω・`)

(´・ω:;.:…

(´:;….::;.:. :::;.. …..

さくらVPSでdokkuを使おうと思った時に詰まった点

さくらVPS(Ubuntu16.04)でdokkuを動かしたかったけど詰まったのでメモ。

インストール方法
Dokku - The smallest PaaS implementation you've ever seen

インストール出来たのにブラウザからアクセスできない!などの問題は下記の記事で全て解決します(ありがたい)
さくらVPSubuntuは、デフォルトでiptablesの80番開いてないみたいなので開きます。
qiita.com

ブラウザから設定が済むとサンプルアプリのデプロイドキュメントが開きます。
Dokku - The smallest PaaS implementation you've ever seen
これもドキュメント通りに進めれば大体大丈夫です。

順番的に先にdokku側でDBの設定とかを行ってからローカルのアプリをデプロイするので、途中下記のようなメッセージが出ますが無視して大丈夫。

$ dokku postgres:link rails-database ruby-rails-sample
-----> Setting config vars
       DATABASE_URL:  postgres://postgres:c235e4e1378e5d38ef9fd4824902f510@dokku-postgres-rails-database:5432/rails_database
-----> Restarting app ruby-rails-sample
App ruby-rails-sample has not been deployed
$

ローカルマシーンでgit remote add dokku dokku@dokku.me:ruby-rails-sampleを打つ所が出てきますが、これは自分のドメインに変更します。
例えばexample.comのような自作ドメインを取得していたら
git remote add dokku dokku@example.com:ruby-rails-sample
とかになります。
独自ドメイン取ってない場合はgit remote add dokku dokku@<ipアドレス>:ruby-rails-sampleとかになるのかな(試してないので不明)

あと、git push dokku masterを打つと! [remote rejected] master -> master (pre-receive hook declined)みたいなエラーが最初出ました(詳細なログは消えた…)
pre-receive hook declined · Issue #501 · dokku/dokku · GitHub
上記を参考にubuntu側で下記のコマンドを打ちます。

$ sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf
$ sudo service docker restart

多分Dockerfileをダウンロードして、その設定を反映させて…みたいな事をやってると思われます。
Dockerほとんど使ってないので下手なことは言えない…。

これで無事git push dokku masterが通るようになりました!
後はログの最後あたりに表示されるhttp://ruby-rails-sample.<ドメイン名>みたいなアドレスにアクセスすれば…!!
f:id:domwp:20180403043425p:plain
はい。

とりあえずubuntu側でdokkuのログを見ます。

$ dokku logs ruby-rails-sample
...
...
...
2018-04-02T19:20:50.998966458Z app[web.1]: ActiveRecord::NoDatabaseError (FATAL:  database "rails_database" does not exist
2018-04-02T19:20:50.999055653Z app[web.1]: ):
...
...
...
$

何やらrails_databaseが無いよ!みたいなエラーに見えます。
そういえばサンプルアプリのデプロイドキュメントで一回DB作成に失敗したような気がしてました。

$ dokku postgres:create rails-database
       Waiting for container to be ready
  ERROR: unable to connect
$ dokku postgres:create rails-database
Postgres service rails-database already exists

というわけで下記を参考にDBを作り直します。
DBの削除はdokku postgres:destroy <DB名>みたいですね!
GitHub - dokku/dokku-postgres: BETA: a postgres plugin for dokku

$ dokku postgres:destroy rails-database
Cannot delete linked service

はい。
一旦アプリとDBのリンクを外します。

$ dokku postgres:unlink rails-database ruby-rails-sample
...
...
...
...
=====> Application deployed:

$

dokku postgres:destroy <DB名>をする時は確認のため<DB名>を求められるので入力します。

$ dokku postgres:destroy rails-database

 !     WARNING: Potentially Destructive Action
 !     This command will destroy rails-database Postgres service.
 !     To proceed, type "rails-database"

> rails-database
-----> Deleting rails-database
       Deleting container data
-----> Stopping container
=====> Container stopped
       Removing container
       Removing data
=====> Postgres container deleted: rails-database
$

再度DBを作成します。

$ dokku postgres:create rails-database
       Waiting for container to be ready
       Creating container database
       Securing connection to database
=====> Postgres container created: rails-database
=====> Container Information
       Config dir:          /var/lib/dokku/services/postgres/rails-database/config
       Data dir:            /var/lib/dokku/services/postgres/rails-database/data
       Dsn:                 postgres://postgres:41a32887830a6fe5932a9aac47e9dc43@dokku-postgres-rails-database:5432/rails_database
       Exposed ports:       -                        
       Id:                  8fba0ce1f2b92d38a1b92b29b589d1bbc76cf1eab1ec37c3960bd44ccf13e347
       Internal ip:         172.17.0.2               
       Links:               -                        
       Service root:        /var/lib/dokku/services/postgres/rails-database
       Status:              running                  
       Version:             postgres:10.2      
$

あ、完全に見たこと無い実行結果が出ました。
何か無事にDBが作成されているような感じがします。

再度DBをアプリにリンクします。

$ dokku postgres:link rails-database ruby-rails-sample
...
...
...
=====> Application deployed:
$

f:id:domwp:20180403052122p:plain

|aa|  |  (^o^)ノ | < おやすみー  |\⌒⌒⌒ \   \|⌒⌒⌒⌒|      ̄ ̄ ̄ ̄ ||<

あれはてなブログってアスキーアート使えないんだ。
Markdownだからかな。。。

IntelliJ IDEAのScalaプロジェクトで「エラー: メイン・クラスMainが見つからなかったかロードできませんでした」と出た

環境

IntelliJ IDEA 2017.2.5
Build #IC-172.4343.14, built on September 26, 2017
JRE: 1.8.0_152-release-915-b12 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

エラー内容

IntelliJ IDEA Community版でScalaプラグイン入れてScalaプロジェクト作り、src/mainに新しいディレクトリ作ってそちらにソースコード追加しようとしたが、何故かNewメニューにScala Classが出てこず、無理やりMain.scalaのようなファイルを作りRunしてもエラーが出てしまう…。

src/main/scala-2.12.4/Main.scala

object Main extends App {
  val a = 2
  val b = 3
  println(s"a * b = ${a * b}")
}

実行結果

エラー: メイン・クラスMainが見つからなかったかロードできませんでした

解決方法

新規作成したプロジェクト:idea-study
新規作成したディレクトリ:src/main/scala-2.12.4

FileProject StructureProject SettingsModulesidea-studyを選択
右のツリーの中からscala-2.12.4を選択して、上の方にあるMark as:SourcesをクリックしOKをクリックする

解決後

ディレクトリがソースコード用のディレクトリとして認識され、色もデフォルトのものから青色に変わり、NewにもScala Classが表示されるようになり、Runも通るようになる。

a * b = 6

その他

N予備校大規模Webアプリ/Scala基礎Scala基礎コース/07.IDE を使った Scala プログラミングで詰まったのでメモ。
昔はsrc/mainディレクトリ追加すれば自動でソースコード用のディレクトリとして認識されたのかな。
ちなみにN予備校の方ではsrc/main/scala-2.11となっていたけど、今のバージョンに合わせてsrc/main/scala-2.12.4としている。
別にscala-2.11でも動くと思う(多分)。

それと実行は出来ているけど、別のよく分からないエラーが出ているが、それは今度調べる(多分)。

objc[94437]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java (0x10ee9a4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10ef844e0). One of the two will be used. Which one is undefined.

問題 1-1 奇数偶数自動判別プログラム

'''
Check odd or even
'''
def odd_or_even(a):
    num_show = 9
    if a%2==0:
        print('{0} is even.'.format(a))
        for i in range(a+2, (a+2) + (num_show * 2)):
            if i%2==0:
                print(i)
    else:
        print('{0} is odd.'.format(a))
        for i in range(a+2, (a+2) + (num_show * 2)):
            if i%2 != 0:
                print(i)


if __name__ == '__main__':
    a = input('Enter a number: ')
    a = float(a)
    if not a.is_integer():
        print('Enter a integer please.')
        exit(0)

    odd_or_even(int(a))