我已经在AWS'弹性beanstalk上建立了一个RoR环境。我能够进入我的EC2实例。 我的主目录是/ home / ec2-user ,实际上是空的。 如果我向上移动目录,还有一个我无法访问的 / home / webapp 目录。
有没有办法在弹性beanstalk实例上运行 rake 命令或 rails console ?
如果我输入 rails console ,我会Usage: rails new APP_PATH [options]
如果我输入 RAILS_ENV =生产包exec rails console ,我会收到“Could not locate Gemfile
”
答案 0 :(得分:52)
对于rails,跳转到/var/app/current
然后@juanpastas说,运行RAILS_ENV=production bundle exec rails c
答案 1 :(得分:40)
不知道为什么,但由于EBS以root身份运行所有内容,这对我有用:
sudo su
bundle exec rails c production
答案 2 :(得分:14)
这里提到的这些解决方案都不适合我,所以我编写了一个脚本/ aws-console中的小脚本。
您可以以root身份从/ var / app / current目录运行它:
eb ssh
cd /var/app/current
sudo script/aws-console
我的脚本可以找到Gist here。
答案 3 :(得分:8)
其他答案都没有对我有用,所以我去寻找 - 这对我现在的弹性beanstalk 64bit amazon linux 2016.03 V2.1.2 ruby 2.2(美洲狮)堆栈
cd /var/app/current
sudo su
rake rails:update:bin
bundle exec rails console
返回预期的控制台
Loading production environment (Rails 4.2.6)
irb(main):001:0>
答案 4 :(得分:3)
我想在我的rails应用的根目录创建一个eb_console
文件,然后chmod u+x
。它包含以下内容:
ssh -t ec2-user@YOUR_EC2_STATION.compute.amazonaws.com 'cd /var/app/current && bin/rails c'
这样,我只需要运行:
./eb_console
就像我会运行heroku run bundle exec rails c
。
答案 5 :(得分:1)
对于最新的红宝石版本,请使用以下命令:
BUNDLE_PATH = / opt / rubies / ruby-2.6.3 / lib / ruby / gems / 2.6.0 / bundle exec rails c production
不需要使用sudo运行它。
答案 6 :(得分:1)
对于 Ruby 2.7:
正如有人所说,如果您不需要 env vars,请运行以下代码
BUNDLE_PATH=/var/app/current/vendor/bundle/ bundle exec rails c
但是,如果您需要 ENV,我建议按照 AWS 文档执行此操作: https://aws.amazon.com/premiumsupport/knowledge-center/elastic-beanstalk-env-variables-linux2/
tl;博士
在 Amazon Linux 2 上,所有环境属性都集中在一个名为 /opt/elasticbeanstalk/deployment/env
的文件中。没有用户可以在应用程序之外访问这些。所以,他们建议在部署后添加一些钩子脚本,基本上创建一个副本。
#!/bin/bash
#Create a copy of the environment variable file.
cp /opt/elasticbeanstalk/deployment/env /opt/elasticbeanstalk/deployment/custom_env_var
#Set permissions to the custom_env_var file so this file can be accessed by any user on the instance. You can restrict permissions as per your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var
#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak
如果由于某种原因您不想以 root 身份运行,请执行以下操作以将 env vars 从 root 传递到新的用户环境:
sudo -u <user> -E env "PATH=$PATH" bash -c 'cd /var/app/current/ && <wtv you want to run>'
答案 7 :(得分:0)
这些都不适合我,包括aws-console脚本。我最终在script
中创建了一个/var/app/current
目录,然后在this answer on another SO question中按照大纲创建了该rails
文件。
eb ssh myEnv
cd /var/app/current
sudo mkdir script
sudo vim script/rails
将此添加到文件并保存:
echo #!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
require 'rails/commands'
然后使其可执行并运行它:
sudo chmod +x script/rails
sudo script/rails console
它有效。
答案 8 :(得分:0)
添加eb扩展快捷方式:
# .ebextensions/irb.config
files:
"/home/ec2-user/irb":
mode: "000777"
owner: root
group: root
content: |
sudo su - -c 'cd /var/app/current; bundle exec rails c'
然后:
$ eb ssh
$ ./irb
irb(main):001:0>
答案 9 :(得分:0)
#!/bin/sh
shell_join () {
ruby -r shellwords -e 'puts Shellwords.join(ARGV)' "$@"
}
command_str () {
printf 'set -e; . /etc/profile.d/eb_envvars.sh; . /etc/profile.d/use-app-ruby.sh; set -x; exec %s\n' "$(shell_join "$@")"
}
exec sudo su webapp -c "$(command_str "$@")"
将文件放在源代码中的某个位置,将eb ssh
部署到eb实例cd /var/app/current
中,然后执行path/to/above/script bin/rails whatever argumeents you usually use
。
我为什么要写上面的脚本的原因是:
sudo
时,它会删除一些Rails应用程序可能实际需要的环境变量;因此手动加载Elastic Beanstalk平台提供的配置文件。webapp
(不可登录用户)上运行Rails应用程序,因此在该用户中运行命令将是明智的。答案 10 :(得分:0)
对于Ruby 2.7:
如果您不需要环境变量:
scipy.integrate.solve_ivp
环境变量似乎不再自动加载,这可能会阻止Rails控制台启动。 我通过创建此.ebextensions文件解决了该问题:
BUNDLE_PATH=/var/app/current/vendor/bundle/ bundle exec rails c
答案 11 :(得分:-1)
您必须找到包含Gemfile的文件夹:p。
要做到这一点,我会看看你的网络服务器配置应该有一个配置,告诉你你的应用程序目录在哪里。
也许你知道你的应用在哪里。
但如果您不知道,我会尝试:
grep -i your_app_name /etc/apache/*
grep -i your_app_name /etc/apache/sites-enabled/*
在Apache config中搜索包含your_app_name的文件。
或者,如果您使用的是nginx,请将上面的apache
替换为nginx
。
RAILS_ENV=production bundle exec rails c
。
确保您的应用程序配置为在Apache或nginx配置中的生产中运行。