如何在AWS Elastic Beanstalk上为Rails应用程序播种数据库

时间:2016-10-08 18:44:00

标签: ruby-on-rails amazon-web-services elastic-beanstalk seeding

我在本地构建了一个小型Rails应用程序,并尝试将其部署到AWS Elastic Beanstalk。

这是我一直关注的指南:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html

部署成功但未发生数据库播种,因此我的所有静态列表值都为空。

虽然我不认为这是“理想”的解决方案,但我确实尝试通过SSH连接到EB实例来手动播种数据库。

eb ssh
cd /var/app/current/
rake db:seed

然后结果是:

[ec2-user@ip-172-31-13-16 current]$ rake db:seed
Rails Error: Unable to access log file. Please ensure that /var/app/current/log/production.log exists and is writable (ie, make it writable for user and group: chmod 0664 /var/app/current/log/production.log). The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
  ActiveRecord::SchemaMigration Load (0.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.1ms)  begin transaction

 ...

(0.1ms)  rollback transaction
rake aborted!
ActiveRecord::StatementInvalid: SQLite3::ReadOnlyException: attempt to write a readonly database: INSERT INTO "users" ("first_name", "last_name", "email", "encrypted_password", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)
/var/app/current/db/seeds.rb:9:in `<top (required)>'
SQLite3::ReadOnlyException: attempt to write a readonly database
/var/app/current/db/seeds.rb:9:in `<top (required)>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

这样做的正确方法是什么?

提前致谢!

3 个答案:

答案 0 :(得分:3)

两个错误(Unable to access log fileattempt to write a readonly database)都归因于文件访问权限。

当您进入EC2实例时,您通常以对capistrano部署目录没有写入权限的用户身份登录。 (您具有读取权限,因此您可以查看文件,但不能写入 - 因此您无法写入日志或创建新的sqlite数据库文件)。

您可以使用sudo以另一个用户身份运行rake:

sudo -u app env PATH=$PATH RAILS_ENV=production bundle exec rake db:seed

(更改&#34; -u app&#34;以您的应用运行的任何用户名 - 或者将其保留为以root身份运行命令)

答案 1 :(得分:2)

尝试 RAILS_ENV=production bundle exec rake db:seed

它在当前包的上下文中使用命令db:seed执行rake脚本。

答案 2 :(得分:1)

如果您在这里并且上述解决方案对您不起作用。

除了使用Benchwarmer上面的答案中提供的命令之外:

https://stackoverflow.com/a/17232607/1216245

我必须运行seed命令,为主键和所有rds设置提供env vars。

endpointUri

终于奏效了:)

您可以在AWS控制台(仪表板)中的环境中的“配置”面板中检查所有这一切。