将rails上的ruby部署到AWS时出现奇怪的问题

时间:2014-05-27 23:38:06

标签: ruby-on-rails ruby amazon-web-services

我目前正在尝试使用AWS服务器上的任何时候设置cronjobs,但是当我尝试运行脚本/ rails文件时,我收到以下消息:

-bash: script/rails: /usr/bin/ruby^M: bad interpreter: No such file or directory

脚本/ rails文件包含以下内容:

#!/usr/bin/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'

对于我来说,无论出于什么原因,我都会在第一行附加额外的^ M.另请注意,我正在开发Windows并部署到AWS ubuntu服务器。有谁知道如何解决这个问题?我正尽力提供尽可能多的指导,但这是一个奇怪的问题。注意:我尝试通过ssh在ubuntu机器上创建文件,但是当我执行脚本/ rails时它尝试执行rails本身。 谢谢, 科迪

2 个答案:

答案 0 :(得分:0)

可能是一个行结束问题,其中windows表示换行符的方式与linux不同,因此当您上传文件时,它将无法正确解释。如果您在服务器上使用vim或vi打开文件,您应该会在行尾看到^ M(Control-M)字符。

如果您通过ftp上传,可以尝试在binmode中上传该文件,这可能会解决它。否则,您可以使用vi:http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/打开文件并删除服务器上的有问题的字符。希望有所帮助。

答案 1 :(得分:0)

我假设您在Windows计算机上创建了此脚本。 Windows使用\r\n作为回车符(新行字符),而linux只使用\n。这意味着当你在windows上编写脚本并将其传输到linux机器上时,额外的\r个字符有时会显示为^M。有一些修复,其中一个最简单的方法就是通过sed运行文件并替换这些字符:

sed -i 's/\r$//' filename

例如:

➜  echo -ne "hello\r\nworld" > example.txt
➜  cat example.txt | od -c
0000000   h   e   l   l   o  \r  \n   w   o   r   l   d
0000014
➜  sed -i 's/\r$//' example.txt
➜  cat example.txt | od -c
0000000   h   e   l   l   o  \n   w   o   r   l   d

其他选项can be found here