Railsのassets:precompileでエラーが出る時

以下を実行したとき、

bundle exec rake assets:precompile RAILS_ENV=production

次のようなエラーが発生しました。

Sass::SyntaxError: Invalid CSS after "...ligram.min.css"": expected selector or at-rule,

原因は最後のセミコロンのつけ忘れでした。

@import "milligram/dist/milligram.min.css";

wheneverの初期設定

schedule.rbを生成します。

wheneverize .

config/schedule.rbを次のように修正します。

以下の例は毎分’hello world!’と表示する例です。

every 1.minute do
  command "echo 'hello world!'"
end

crontabを更新します。

whenever --update-crontab

Ubunutuではcronログを/var/log/syslogで確認できます。

ActiveRecord::ProtectedEnvironmentErrorを回避する

production環境でdb:resetを実行すると、次のようなエラーが発生します。

rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
bin/rails:9:in `require'
bin/rails:9:in `<main>'
Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

DISABLE_DATABASE_ENVIRONMENT_CHECKフラグを立ててあげると、一応回避することも可能です。

bin/rails db:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1

基本的にproduction環境でdb:resetをすることはないと思いますが、リリース前の検証などには使えるかもしれません。

RailsでActiveRecord::ValueTooLongが出た時

列のサイズを超えた長いデータを保存しようとした時に発生します。

ActiveRecord::ValueTooLong (Mysql2::Error: Data too long for column...

modelのmigrateでtextを指定した時、limitを指定しないとTEXTとして作成されます。

下はMEDIUM_TEXTとして指定する例です。

  • medium_text
t.text :medium_text, limit: 16777215

passenger-statusでエラーが出た時

sudo passenger-status

を実行したとき、このようなエラーが出ました。

ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it is running, then the causes of this problem could be:

You customized the instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument. If so, please set the environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that directory and run passenger-status again.
The instance directory has been removed by an operating system background service. Please set a different instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument.

他のサイトなどを参考すると、PASSENGER_INSTANCE_REGISTRY_DIRを設定するなどがありましたが、私の場合は恐ろしい凡ミスで、

include /etc/nginx/passenger.conf;

のコメントアウトを忘れていました。